From 9d87240f4c9c0d29d67dafdc0363ddc30ee7c45d Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 15 Apr 2024 16:58:07 +0200 Subject: [PATCH 001/289] Room list : activate merged invites in Client --- .../android/libraries/matrix/api/roomlist/RoomSummary.kt | 2 ++ .../android/libraries/matrix/impl/RustMatrixClientFactory.kt | 1 + .../matrix/impl/roomlist/RoomSummaryDetailsFactory.kt | 2 ++ .../android/libraries/matrix/test/room/RoomSummaryFixture.kt | 3 +++ .../android/libraries/matrix/ui/components/SelectedRoom.kt | 3 +++ 5 files changed, 11 insertions(+) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt index 07fa9154bd..b7955a9c79 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt @@ -17,6 +17,7 @@ package io.element.android.libraries.matrix.api.roomlist import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.message.RoomMessage @@ -49,6 +50,7 @@ data class RoomSummaryDetails( val hasRoomCall: Boolean, val isDm: Boolean, val isFavorite: Boolean, + val currentUserMembership: CurrentUserMembership, ) { val lastMessageTimestamp = lastMessage?.originServerTs } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt index 80302933d5..fefec384dd 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt @@ -71,6 +71,7 @@ class RustMatrixClientFactory @Inject constructor( val syncService = client.syncService() .withUtdHook(utdTracker) + .withUnifiedInvitesInRoomList(true) .finish() RustMatrixClient( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt index e740c36605..834c49ac2a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt @@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.impl.roomlist import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.roomlist.RoomSummaryDetails import io.element.android.libraries.matrix.impl.notificationsettings.RoomNotificationSettingsMapper +import io.element.android.libraries.matrix.impl.room.map import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper import io.element.android.libraries.matrix.impl.room.message.RoomMessageFactory import org.matrix.rustcomponents.sdk.RoomInfo @@ -45,6 +46,7 @@ class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFacto hasRoomCall = roomInfo.hasRoomCall, isDm = roomInfo.isDirect && roomInfo.activeMembersCount.toLong() == 2L, isFavorite = roomInfo.isFavourite, + currentUserMembership = roomInfo.membership.map(), ) } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt index e0b0c38d4d..badb68e9e1 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt @@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.test.room import io.element.android.libraries.matrix.api.core.EventId 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.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.message.RoomMessage @@ -73,6 +74,7 @@ fun aRoomSummaryDetails( hasRoomCall: Boolean = false, isDm: Boolean = false, isFavorite: Boolean = false, + currentUserMembership: CurrentUserMembership = CurrentUserMembership.JOINED, ) = RoomSummaryDetails( roomId = roomId, name = name, @@ -89,6 +91,7 @@ fun aRoomSummaryDetails( hasRoomCall = hasRoomCall, isDm = isDm, isFavorite = isFavorite, + currentUserMembership = currentUserMembership, ) fun aRoomMessage( diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt index 3015c81355..4caad93b46 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt @@ -44,6 +44,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.message.RoomMessage @@ -118,6 +119,7 @@ fun aRoomSummaryDetails( numUnreadNotifications: Int = 0, isMarkedUnread: Boolean = false, isFavorite: Boolean = false, + currentUserMembership: CurrentUserMembership = CurrentUserMembership.JOINED, ) = RoomSummaryDetails( roomId = roomId, name = name, @@ -134,4 +136,5 @@ fun aRoomSummaryDetails( numUnreadNotifications = numUnreadNotifications, isMarkedUnread = isMarkedUnread, isFavorite = isFavorite, + currentUserMembership = currentUserMembership, ) From 26eaed5ea49836a3540cd9dd0265517ff7785642 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 15 Apr 2024 21:42:39 +0200 Subject: [PATCH 002/289] RoomList : invite row --- .../roomlist/impl/RoomListPresenter.kt | 2 +- .../roomlist/impl/RoomListStateProvider.kt | 5 +- .../features/roomlist/impl/RoomListView.kt | 2 +- .../impl/components/RoomSummaryRow.kt | 308 +++++++++++++----- .../datasource/RoomListRoomSummaryFactory.kt | 30 +- .../roomlist/impl/model/DisplayType.kt | 26 ++ .../roomlist/impl/model/InviteSender.kt | 57 ++++ .../impl/model/RoomListRoomSummary.kt | 15 +- .../impl/model/RoomListRoomSummaryProvider.kt | 36 +- .../impl/src/main/res/values/localazy.xml | 6 + .../impl/model/RoomListRoomSummaryTest.kt | 2 +- tools/localazy/config.json | 3 +- 12 files changed, 382 insertions(+), 110 deletions(-) create mode 100644 features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/DisplayType.kt create mode 100644 features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index 0b5d07dc69..98d8d0ae0e 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -214,7 +214,7 @@ class RoomListPresenter @Inject constructor( val initialState = RoomListState.ContextMenu.Shown( roomId = event.roomListRoomSummary.roomId, roomName = event.roomListRoomSummary.name, - isDm = event.roomListRoomSummary.isDm, + isDm = event.roomListRoomSummary.isDirect, isFavorite = event.roomListRoomSummary.isFavorite, markAsUnreadFeatureFlagEnabled = featureFlagService.isFeatureEnabled(FeatureFlags.MarkAsUnread), hasNewContent = event.roomListRoomSummary.hasNewContent diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index c80430f9fe..8085ed9e58 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -21,6 +21,7 @@ import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState import io.element.android.features.roomlist.impl.filters.RoomListFiltersState import io.element.android.features.roomlist.impl.filters.aRoomListFiltersState +import io.element.android.features.roomlist.impl.model.DisplayType import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.aRoomListRoomSummary import io.element.android.features.roomlist.impl.search.RoomListSearchState @@ -98,11 +99,11 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { ), aRoomListRoomSummary( id = "!roomId3:domain", - isPlaceholder = true, + displayType = DisplayType.PLACEHOLDER, ), aRoomListRoomSummary( id = "!roomId4:domain", - isPlaceholder = true, + displayType = DisplayType.PLACEHOLDER, ), ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt index 881d06411e..1dee95cbc2 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt @@ -180,7 +180,7 @@ private fun RoomListScaffold( ) } -internal fun RoomListRoomSummary.contentType() = isPlaceholder +internal fun RoomListRoomSummary.contentType() = type.ordinal @PreviewsDayNight @Composable diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 78174f2acf..0acda82c45 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -20,15 +20,18 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Arrangement.Absolute.spacedBy import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.material.ripple.rememberRipple import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -36,12 +39,15 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.features.roomlist.impl.model.DisplayType +import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryProvider import io.element.android.libraries.core.extensions.orEmpty @@ -49,13 +55,17 @@ import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAto import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.designsystem.theme.components.Button +import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.Icon +import io.element.android.libraries.designsystem.theme.components.OutlinedButton import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.roomListRoomMessage import io.element.android.libraries.designsystem.theme.roomListRoomMessageDate import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.unreadIndicator import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.ui.strings.CommonStrings internal val minHeight = 84.dp @@ -66,27 +76,53 @@ internal fun RoomSummaryRow( onLongClick: (RoomListRoomSummary) -> Unit, modifier: Modifier = Modifier, ) { - if (room.isPlaceholder) { - RoomSummaryPlaceholderRow( - modifier = modifier, - ) - } else { - RoomSummaryRealRow( - room = room, - onClick = onClick, - onLongClick = onLongClick, - modifier = modifier - ) + when (room.type) { + DisplayType.PLACEHOLDER -> { + RoomSummaryPlaceholderRow(modifier = modifier) + } + DisplayType.INVITE -> { + RoomSummaryScaffoldRow( + room = room, + onClick = onClick, + onLongClick = onLongClick, + modifier = modifier + ) { + InviteNameAndIndicatorRow(name = room.name) + InviteSubtitle(isDirect = room.isDirect, inviteSender = room.inviteSender, canonicalAlias = room.canonicalAlias) + if (!room.isDirect && room.inviteSender != null) { + Spacer(modifier = Modifier.height(4.dp)) + InviteSenderRow(sender = room.inviteSender) + } + Spacer(modifier = Modifier.height(12.dp)) + InviteButtonsRow(onAcceptClicked = { }, onDeclineClicked = { }) + } + } + DisplayType.ROOM -> { + RoomSummaryScaffoldRow( + room = room, + onClick = onClick, + onLongClick = onLongClick, + modifier = modifier + ) { + NameAndTimestampRow( + name = room.name, + timestamp = room.timestamp, + isHighlighted = room.isHighlighted + ) + LastMessageAndIndicatorRow(room = room) + } + } } } @OptIn(ExperimentalFoundationApi::class) @Composable -private fun RoomSummaryRealRow( +private fun RoomSummaryScaffoldRow( room: RoomListRoomSummary, onClick: (RoomListRoomSummary) -> Unit, onLongClick: (RoomListRoomSummary) -> Unit, modifier: Modifier = Modifier, + content: @Composable ColumnScope.() -> Unit ) { val clickModifier = Modifier.combinedClickable( onClick = { onClick(room) }, @@ -97,97 +133,189 @@ private fun RoomSummaryRealRow( Row( modifier = modifier - .fillMaxWidth() - .heightIn(min = minHeight) - .then(clickModifier) - .fillMaxWidth() - .padding(horizontal = 16.dp, vertical = 11.dp) - .height(IntrinsicSize.Min), - ) { - Avatar( - room - .avatarData, - modifier = Modifier - .align(Alignment.CenterVertically) - ) - Column( - modifier = Modifier .fillMaxWidth() - .padding(start = 16.dp) + .heightIn(min = minHeight) + .then(clickModifier) + .padding(horizontal = 16.dp, vertical = 11.dp) + .height(IntrinsicSize.Min), + ) { + Avatar(room.avatarData) + Spacer(modifier = Modifier.width(16.dp)) + Column( + modifier = Modifier.fillMaxWidth(), + content = content, + ) + } +} + +@Composable +private fun NameAndTimestampRow( + name: String, + timestamp: String?, + isHighlighted: Boolean, + modifier: Modifier = Modifier +) { + Row( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = spacedBy(16.dp) + ) { + // Name + Text( + modifier = Modifier.weight(1f), + style = ElementTheme.typography.fontBodyLgMedium, + text = name, + color = MaterialTheme.roomListRoomName(), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + // Timestamp + Text( + text = timestamp ?: "", + style = ElementTheme.typography.fontBodySmMedium, + color = if (isHighlighted) { + ElementTheme.colors.unreadIndicator + } else { + MaterialTheme.roomListRoomMessageDate() + }, + ) + } +} + +@Composable +private fun InviteSubtitle( + isDirect: Boolean, + inviteSender: InviteSender?, + canonicalAlias: String?, + modifier: Modifier = Modifier +) { + val subtitle = if (isDirect) { + inviteSender?.userId?.value + } else { + canonicalAlias + } + if (subtitle != null) { + Text( + text = subtitle, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = ElementTheme.typography.fontBodyMdRegular, + color = MaterialTheme.roomListRoomMessage(), + modifier = modifier, + ) + } +} + +@Composable +private fun LastMessageAndIndicatorRow( + room: RoomListRoomSummary, + modifier: Modifier = Modifier, +) { + Row( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = spacedBy(28.dp) + ) { + // Last Message + val attributedLastMessage = room.lastMessage as? AnnotatedString + ?: AnnotatedString(room.lastMessage.orEmpty().toString()) + Text( + modifier = Modifier.weight(1f), + text = attributedLastMessage, + color = MaterialTheme.roomListRoomMessage(), + style = ElementTheme.typography.fontBodyMdRegular, + minLines = 2, + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + // Call and unread + Row( + modifier = Modifier.height(16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically, ) { - Row(modifier = Modifier.fillMaxWidth()) { - NameAndTimestampRow(room = room) + val tint = if (room.isHighlighted) ElementTheme.colors.unreadIndicator else ElementTheme.colors.iconQuaternary + if (room.hasRoomCall) { + OnGoingCallIcon( + color = tint, + ) } - Row(modifier = Modifier.fillMaxWidth()) { - LastMessageAndIndicatorRow(room = room) + if (room.userDefinedNotificationMode == RoomNotificationMode.MUTE) { + NotificationOffIndicatorAtom() + } else if (room.numberOfUnreadMentions > 0) { + MentionIndicatorAtom() + } + if (room.hasNewContent) { + UnreadIndicatorAtom( + color = tint + ) } } } } @Composable -private fun RowScope.NameAndTimestampRow(room: RoomListRoomSummary) { - // Name - Text( - modifier = Modifier - .weight(1f) - .padding(end = 16.dp), - style = ElementTheme.typography.fontBodyLgMedium, - text = room.name, - color = MaterialTheme.roomListRoomName(), - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - // Timestamp - Text( - text = room.timestamp ?: "", - style = ElementTheme.typography.fontBodySmMedium, - color = if (room.isHighlighted) { - ElementTheme.colors.unreadIndicator - } else { - MaterialTheme.roomListRoomMessageDate() - }, - ) +private fun InviteNameAndIndicatorRow( + name: String, + modifier: Modifier = Modifier, +) { + Row( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + modifier = Modifier.weight(1f), + style = ElementTheme.typography.fontBodyLgMedium, + text = name, + color = MaterialTheme.roomListRoomName(), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + UnreadIndicatorAtom( + color = ElementTheme.colors.unreadIndicator + ) + } } @Composable -private fun RowScope.LastMessageAndIndicatorRow(room: RoomListRoomSummary) { - // Last Message - val attributedLastMessage = room.lastMessage as? AnnotatedString - ?: AnnotatedString(room.lastMessage.orEmpty().toString()) - Text( - modifier = Modifier - .weight(1f) - .padding(end = 28.dp), - text = attributedLastMessage, - color = MaterialTheme.roomListRoomMessage(), - style = ElementTheme.typography.fontBodyMdRegular, - minLines = 2, - maxLines = 2, - overflow = TextOverflow.Ellipsis - ) - // Call and unread +private fun InviteSenderRow( + sender: InviteSender, + modifier: Modifier = Modifier +) { Row( - modifier = Modifier.height(16.dp), - horizontalArrangement = Arrangement.spacedBy(8.dp), - verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp), + modifier = modifier.fillMaxWidth(), ) { - val tint = if (room.isHighlighted) ElementTheme.colors.unreadIndicator else ElementTheme.colors.iconQuaternary - if (room.hasRoomCall) { - OnGoingCallIcon( - color = tint, - ) - } - if (room.userDefinedNotificationMode == RoomNotificationMode.MUTE) { - NotificationOffIndicatorAtom() - } else if (room.numberOfUnreadMentions > 0) { - MentionIndicatorAtom() - } - if (room.hasNewContent) { - UnreadIndicatorAtom( - color = tint - ) - } + Avatar(avatarData = sender.avatarData) + Text( + text = sender.annotatedString(), + style = ElementTheme.typography.fontBodyMdRegular, + color = MaterialTheme.colorScheme.secondary, + ) + } +} + +@Composable +private fun InviteButtonsRow( + onAcceptClicked: () -> Unit, + onDeclineClicked: () -> Unit, + modifier: Modifier = Modifier +) { + Row( + modifier = modifier.padding(), + horizontalArrangement = spacedBy(12.dp) + ) { + OutlinedButton( + text = stringResource(CommonStrings.action_decline), + onClick = onDeclineClicked, + size = ButtonSize.Medium, + modifier = Modifier.weight(1f), + ) + Button( + text = stringResource(CommonStrings.action_accept), + onClick = onAcceptClicked, + size = ButtonSize.Medium, + modifier = Modifier.weight(1f), + ) } } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt index 07cdabea8e..a92c56e94f 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt @@ -16,13 +16,16 @@ package io.element.android.features.roomlist.impl.datasource +import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary +import io.element.android.features.roomlist.impl.model.DisplayType import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.dateformatter.api.LastMessageTimestampFormatter import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.roomlist.RoomSummary import javax.inject.Inject @@ -35,7 +38,7 @@ class RoomListRoomSummaryFactory @Inject constructor( return RoomListRoomSummary( id = id, roomId = RoomId(id), - isPlaceholder = true, + type = DisplayType.PLACEHOLDER, name = "Short name", timestamp = "hh:mm", lastMessage = "Last message for placeholder", @@ -46,8 +49,10 @@ class RoomListRoomSummaryFactory @Inject constructor( isMarkedUnread = false, userDefinedNotificationMode = null, hasRoomCall = false, - isDm = false, + isDirect = false, isFavorite = false, + inviteSender = null, + canonicalAlias = null, ) } } @@ -73,11 +78,28 @@ class RoomListRoomSummaryFactory @Inject constructor( roomLastMessageFormatter.format(message.event, roomSummary.details.isDirect) }.orEmpty(), avatarData = avatarData, - isPlaceholder = false, userDefinedNotificationMode = roomSummary.details.userDefinedNotificationMode, hasRoomCall = roomSummary.details.hasRoomCall, - isDm = roomSummary.details.isDm, + isDirect = roomSummary.details.isDirect, isFavorite = roomSummary.details.isFavorite, + inviteSender = roomSummary.details.inviter?.run { + InviteSender( + userId = userId, + displayName = displayName ?: "", + avatarData = AvatarData( + id = userId.value, + name = displayName, + url = avatarUrl, + size = AvatarSize.InviteSender, + ), + ) + }, + canonicalAlias = roomSummary.details.canonicalAlias, + type = if (roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED) { + DisplayType.INVITE + } else { + DisplayType.ROOM + } ) } } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/DisplayType.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/DisplayType.kt new file mode 100644 index 0000000000..a6e0106f9c --- /dev/null +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/DisplayType.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomlist.impl.model + +/** + * Represents the type of display for a room list item. + */ +enum class DisplayType { + PLACEHOLDER, + ROOM, + INVITE +} diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt new file mode 100644 index 0000000000..137ab4797a --- /dev/null +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomlist.impl.model + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.font.FontWeight +import io.element.android.features.roomlist.impl.R +import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.matrix.api.core.UserId + +@Immutable +data class InviteSender( + val userId: UserId, + val displayName: String, + val avatarData: AvatarData, +) { + + @Composable + fun annotatedString(): AnnotatedString { + return stringResource(R.string.screen_invites_invited_you, displayName, userId.value).let { text -> + val senderNameStart = LocalContext.current.getString(R.string.screen_invites_invited_you).indexOf("%1\$s") + AnnotatedString( + text = text, + spanStyles = listOf( + AnnotatedString.Range( + SpanStyle( + fontWeight = FontWeight.Medium, + color = MaterialTheme.colorScheme.primary + ), + start = senderNameStart, + end = senderNameStart + displayName.length + ) + ) + ) + } + } +} diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index cc9f94aa52..996fc18c66 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -24,8 +24,10 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationMode @Immutable data class RoomListRoomSummary( val id: String, + val type: DisplayType, val roomId: RoomId, val name: String, + val canonicalAlias: String?, val numberOfUnreadMessages: Int, val numberOfUnreadMentions: Int, val numberOfUnreadNotifications: Int, @@ -33,18 +35,21 @@ data class RoomListRoomSummary( val timestamp: String?, val lastMessage: CharSequence?, val avatarData: AvatarData, - val isPlaceholder: Boolean, val userDefinedNotificationMode: RoomNotificationMode?, val hasRoomCall: Boolean, - val isDm: Boolean, + val isDirect: Boolean, val isFavorite: Boolean, -) { + val inviteSender: InviteSender?, + + ) { val isHighlighted = userDefinedNotificationMode != RoomNotificationMode.MUTE && (numberOfUnreadNotifications > 0 || numberOfUnreadMentions > 0) || - isMarkedUnread + isMarkedUnread || + type == DisplayType.INVITE val hasNewContent = numberOfUnreadMessages > 0 || numberOfUnreadMentions > 0 || numberOfUnreadNotifications > 0 || - isMarkedUnread + isMarkedUnread || + type == DisplayType.INVITE } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index feec962d85..d33803fd2b 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -20,13 +20,14 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.core.RoomId +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomNotificationMode open class RoomListRoomSummaryProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( listOf( - aRoomListRoomSummary(isPlaceholder = true), + aRoomListRoomSummary(displayType = DisplayType.PLACEHOLDER), aRoomListRoomSummary(), aRoomListRoomSummary(lastMessage = null), aRoomListRoomSummary( @@ -80,6 +81,27 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider "Your chat backup is currently out of sync. You need to enter your recovery key to maintain access to your chat backup." "Enter your recovery key" + "Are you sure you want to decline the invitation to join %1$s?" + "Decline invite" + "Are you sure you want to decline this private chat with %1$s?" + "Decline chat" + "No Invites" + "%1$s (%2$s) invited you" "This is a one time process, thanks for waiting." "Setting up your account." "Create a new conversation or room" diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryTest.kt index 5cdd8ef39c..82816e674f 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryTest.kt @@ -95,6 +95,6 @@ internal fun createRoomListRoomSummary( isPlaceholder = false, userDefinedNotificationMode = userDefinedNotificationMode, hasRoomCall = false, - isDm = false, + isDirect = false, isFavorite = isFavorite, ) diff --git a/tools/localazy/config.json b/tools/localazy/config.json index f7678c840f..15d2f67949 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -130,7 +130,8 @@ "screen_roomlist_.*", "session_verification_banner_.*", "confirm_recovery_key_banner_.*", - "screen_migration_.*" + "screen_migration_.*", + "screen_invites_.*" ] }, { From c102c5b436a00a9f398e9dd2b621647d5397ee74 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 15 Apr 2024 22:04:23 +0200 Subject: [PATCH 003/289] RoomList: branch accept/decline invite actions --- .../features/roomlist/impl/RoomListEvents.kt | 2 ++ .../features/roomlist/impl/RoomListNode.kt | 11 ++++++- .../roomlist/impl/RoomListPresenter.kt | 23 +++++++++++++ .../features/roomlist/impl/RoomListState.kt | 2 ++ .../roomlist/impl/RoomListStateProvider.kt | 4 +++ .../features/roomlist/impl/RoomListView.kt | 14 +++----- .../impl/components/RoomListContentView.kt | 8 +---- .../impl/components/RoomSummaryRow.kt | 32 +++++++++++++------ .../impl/search/RoomListSearchView.kt | 11 ++++--- 9 files changed, 75 insertions(+), 32 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListEvents.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListEvents.kt index cad5dd3311..aa1e8e2832 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListEvents.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListEvents.kt @@ -24,6 +24,8 @@ sealed interface RoomListEvents { data object DismissRequestVerificationPrompt : RoomListEvents data object DismissRecoveryKeyPrompt : RoomListEvents data object ToggleSearchResults : RoomListEvents + data class AcceptInvite(val roomListRoomSummary: RoomListRoomSummary) : RoomListEvents + data class DeclineInvite(val roomListRoomSummary: RoomListRoomSummary) : RoomListEvents data class ShowContextMenu(val roomListRoomSummary: RoomListRoomSummary) : RoomListEvents sealed interface ContextMenuEvents : RoomListEvents diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt index e9af66d331..c2051ceff3 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt @@ -29,6 +29,7 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode +import io.element.android.features.invite.api.response.AcceptDeclineInviteView import io.element.android.features.roomlist.api.RoomListEntryPoint import io.element.android.features.roomlist.impl.components.RoomListMenuAction import io.element.android.libraries.deeplink.usecase.InviteFriendsUseCase @@ -43,6 +44,7 @@ class RoomListNode @AssistedInject constructor( private val presenter: RoomListPresenter, private val inviteFriendsUseCase: InviteFriendsUseCase, private val analyticsService: AnalyticsService, + private val acceptDeclineInviteView: AcceptDeclineInviteView, ) : Node(buildContext, plugins = plugins) { init { lifecycle.subscribe( @@ -106,6 +108,13 @@ class RoomListNode @AssistedInject constructor( onMenuActionClicked = { onMenuActionClicked(activity, it) }, onRoomDirectorySearchClicked = this::onRoomDirectorySearchClicked, modifier = modifier, - ) + ) { + acceptDeclineInviteView.Render( + state = state.acceptDeclineInviteState, + onInviteAccepted = this::onRoomClicked, + onInviteDeclined = { }, + modifier = Modifier + ) + } } } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index 98d8d0ae0e..ce6097b512 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -32,6 +32,9 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import im.vector.app.features.analytics.plan.Interaction +import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents +import io.element.android.features.invite.api.response.AcceptDeclineInviteState +import io.element.android.features.invite.api.response.InviteData import io.element.android.features.leaveroom.api.LeaveRoomEvent import io.element.android.features.leaveroom.api.LeaveRoomPresenter import io.element.android.features.networkmonitor.api.NetworkMonitor @@ -41,6 +44,7 @@ import io.element.android.features.roomlist.impl.datasource.InviteStateDataSourc import io.element.android.features.roomlist.impl.datasource.RoomListDataSource import io.element.android.features.roomlist.impl.filters.RoomListFiltersState import io.element.android.features.roomlist.impl.migration.MigrationScreenState +import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.search.RoomListSearchEvents import io.element.android.features.roomlist.impl.search.RoomListSearchState import io.element.android.libraries.architecture.AsyncData @@ -89,6 +93,7 @@ class RoomListPresenter @Inject constructor( private val migrationScreenPresenter: Presenter, private val sessionPreferencesStore: SessionPreferencesStore, private val analyticsService: AnalyticsService, + private val acceptDeclineInvitePresenter: Presenter, ) : Presenter { private val encryptionService: EncryptionService = client.encryptionService() private val syncService: SyncService = client.syncService() @@ -101,6 +106,7 @@ class RoomListPresenter @Inject constructor( val networkConnectionStatus by networkMonitor.connectivity.collectAsState() val filtersState = filtersPresenter.present() val searchState = searchPresenter.present() + val acceptDeclineInviteState = acceptDeclineInvitePresenter.present() LaunchedEffect(Unit) { roomListDataSource.launchIn(this) @@ -131,6 +137,16 @@ class RoomListPresenter @Inject constructor( is RoomListEvents.SetRoomIsFavorite -> coroutineScope.setRoomIsFavorite(event.roomId, event.isFavorite) is RoomListEvents.MarkAsRead -> coroutineScope.markAsRead(event.roomId) is RoomListEvents.MarkAsUnread -> coroutineScope.markAsUnread(event.roomId) + is RoomListEvents.AcceptInvite -> { + acceptDeclineInviteState.eventSink( + AcceptDeclineInviteEvents.AcceptInvite(event.roomListRoomSummary.toInviteData()) + ) + } + is RoomListEvents.DeclineInvite -> { + acceptDeclineInviteState.eventSink( + AcceptDeclineInviteEvents.DeclineInvite(event.roomListRoomSummary.toInviteData()) + ) + } } } @@ -148,6 +164,7 @@ class RoomListPresenter @Inject constructor( filtersState = filtersState, searchState = searchState, contentState = contentState, + acceptDeclineInviteState = acceptDeclineInviteState, eventSink = ::handleEvents, ) } @@ -282,4 +299,10 @@ class RoomListPresenter @Inject constructor( val extendedRange = IntRange(extendedRangeStart, extendedRangeEnd) client.roomListService.updateAllRoomsVisibleRange(extendedRange) } + + private fun RoomListRoomSummary.toInviteData() = InviteData( + roomId = roomId, + roomName = name, + isDirect = isDirect, + ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt index 62f59b4eaa..0305f43bfc 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt @@ -17,6 +17,7 @@ package io.element.android.features.roomlist.impl import androidx.compose.runtime.Immutable +import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.roomlist.impl.filters.RoomListFiltersState import io.element.android.features.roomlist.impl.model.RoomListRoomSummary @@ -37,6 +38,7 @@ data class RoomListState( val filtersState: RoomListFiltersState, val searchState: RoomListSearchState, val contentState: RoomListContentState, + val acceptDeclineInviteState: AcceptDeclineInviteState, val eventSink: (RoomListEvents) -> Unit, ) { val displayFilters = filtersState.isFeatureEnabled && contentState is RoomListContentState.Rooms diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index 8085ed9e58..372a14f7a7 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -17,6 +17,8 @@ package io.element.android.features.roomlist.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.invite.api.response.AcceptDeclineInviteState +import io.element.android.features.invite.api.response.anAcceptDeclineInviteState import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState import io.element.android.features.roomlist.impl.filters.RoomListFiltersState @@ -65,6 +67,7 @@ internal fun aRoomListState( searchState: RoomListSearchState = aRoomListSearchState(), filtersState: RoomListFiltersState = aRoomListFiltersState(isFeatureEnabled = false), contentState: RoomListContentState = aRoomsContentState(), + acceptDeclineInviteState: AcceptDeclineInviteState = anAcceptDeclineInviteState(), eventSink: (RoomListEvents) -> Unit = {} ) = RoomListState( matrixUser = matrixUser, @@ -76,6 +79,7 @@ internal fun aRoomListState( filtersState = filtersState, searchState = searchState, contentState = contentState, + acceptDeclineInviteState = acceptDeclineInviteState, eventSink = eventSink, ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt index 1dee95cbc2..212894f521 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.features.invite.api.response.AcceptDeclineInviteView import io.element.android.features.leaveroom.api.LeaveRoomView import io.element.android.features.networkmonitor.api.ui.ConnectivityIndicatorContainer import io.element.android.features.roomlist.impl.components.RoomListContentView @@ -60,17 +61,13 @@ fun RoomListView( onMenuActionClicked: (RoomListMenuAction) -> Unit, onRoomDirectorySearchClicked: () -> Unit, modifier: Modifier = Modifier, + acceptDeclineInviteView: @Composable ()->Unit, ) { ConnectivityIndicatorContainer( modifier = modifier, isOnline = state.hasNetworkConnection, ) { topPadding -> Box { - fun onRoomLongClicked( - roomListRoomSummary: RoomListRoomSummary - ) { - state.eventSink(RoomListEvents.ShowContextMenu(roomListRoomSummary)) - } if (state.contextMenu is RoomListState.ContextMenu.Shown) { RoomListContextMenu( @@ -87,7 +84,6 @@ fun RoomListView( state = state, onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onRoomClicked = onRoomClicked, - onRoomLongClicked = { onRoomLongClicked(it) }, onOpenSettings = onSettingsClicked, onCreateRoomClicked = onCreateRoomClicked, onInvitesClicked = onInvitesClicked, @@ -96,8 +92,8 @@ fun RoomListView( // This overlaid view will only be visible when state.displaySearchResults is true RoomListSearchView( state = state.searchState, + eventSink = state.eventSink, onRoomClicked = onRoomClicked, - onRoomLongClicked = { onRoomLongClicked(it) }, onRoomDirectorySearchClicked = onRoomDirectorySearchClicked, modifier = Modifier .statusBarsPadding() @@ -105,6 +101,7 @@ fun RoomListView( .fillMaxSize() .background(MaterialTheme.colorScheme.background) ) + acceptDeclineInviteView() } } } @@ -115,7 +112,6 @@ private fun RoomListScaffold( state: RoomListState, onConfirmRecoveryKeyClicked: () -> Unit, onRoomClicked: (RoomId) -> Unit, - onRoomLongClicked: (RoomListRoomSummary) -> Unit, onOpenSettings: () -> Unit, onCreateRoomClicked: () -> Unit, onInvitesClicked: () -> Unit, @@ -153,7 +149,6 @@ private fun RoomListScaffold( eventSink = state.eventSink, onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onRoomClicked = ::onRoomClicked, - onRoomLongClicked = onRoomLongClicked, onCreateRoomClicked = onCreateRoomClicked, onInvitesClicked = onInvitesClicked, modifier = Modifier @@ -195,5 +190,6 @@ internal fun RoomListViewPreview(@PreviewParameter(RoomListStateProvider::class) onRoomSettingsClicked = {}, onMenuActionClicked = {}, onRoomDirectorySearchClicked = {}, + acceptDeclineInviteView = {}, ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt index 552ff008a0..f49d879e02 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt @@ -75,7 +75,6 @@ fun RoomListContentView( eventSink: (RoomListEvents) -> Unit, onConfirmRecoveryKeyClicked: () -> Unit, onRoomClicked: (RoomListRoomSummary) -> Unit, - onRoomLongClicked: (RoomListRoomSummary) -> Unit, onCreateRoomClicked: () -> Unit, onInvitesClicked: () -> Unit, modifier: Modifier = Modifier, @@ -104,7 +103,6 @@ fun RoomListContentView( eventSink = eventSink, onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onRoomClicked = onRoomClicked, - onRoomLongClicked = onRoomLongClicked, onInvitesClicked = onInvitesClicked, ) } @@ -161,7 +159,6 @@ private fun RoomsView( eventSink: (RoomListEvents) -> Unit, onConfirmRecoveryKeyClicked: () -> Unit, onRoomClicked: (RoomListRoomSummary) -> Unit, - onRoomLongClicked: (RoomListRoomSummary) -> Unit, onInvitesClicked: () -> Unit, modifier: Modifier = Modifier, ) { @@ -176,7 +173,6 @@ private fun RoomsView( eventSink = eventSink, onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onRoomClicked = onRoomClicked, - onRoomLongClicked = onRoomLongClicked, onInvitesClicked = onInvitesClicked, modifier = modifier.fillMaxSize(), ) @@ -189,7 +185,6 @@ private fun RoomsViewList( eventSink: (RoomListEvents) -> Unit, onConfirmRecoveryKeyClicked: () -> Unit, onRoomClicked: (RoomListRoomSummary) -> Unit, - onRoomLongClicked: (RoomListRoomSummary) -> Unit, onInvitesClicked: () -> Unit, modifier: Modifier = Modifier, ) { @@ -242,7 +237,7 @@ private fun RoomsViewList( RoomSummaryRow( room = room, onClick = onRoomClicked, - onLongClick = onRoomLongClicked, + eventSink = eventSink, ) if (index != state.summaries.lastIndex) { HorizontalDivider() @@ -305,7 +300,6 @@ internal fun RoomListContentViewPreview(@PreviewParameter(RoomListContentStatePr eventSink = {}, onConfirmRecoveryKeyClicked = {}, onRoomClicked = {}, - onRoomLongClicked = {}, onCreateRoomClicked = {}, onInvitesClicked = {} ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 0acda82c45..ecc9b0bd83 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -46,6 +46,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.features.roomlist.impl.RoomListEvents import io.element.android.features.roomlist.impl.model.DisplayType import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary @@ -66,6 +67,7 @@ import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.unreadIndicator import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.ui.strings.CommonStrings +import timber.log.Timber internal val minHeight = 84.dp @@ -73,7 +75,7 @@ internal val minHeight = 84.dp internal fun RoomSummaryRow( room: RoomListRoomSummary, onClick: (RoomListRoomSummary) -> Unit, - onLongClick: (RoomListRoomSummary) -> Unit, + eventSink: (RoomListEvents) -> Unit, modifier: Modifier = Modifier, ) { when (room.type) { @@ -84,7 +86,9 @@ internal fun RoomSummaryRow( RoomSummaryScaffoldRow( room = room, onClick = onClick, - onLongClick = onLongClick, + onLongClick = { + Timber.d("Long click on invite room") + }, modifier = modifier ) { InviteNameAndIndicatorRow(name = room.name) @@ -94,14 +98,22 @@ internal fun RoomSummaryRow( InviteSenderRow(sender = room.inviteSender) } Spacer(modifier = Modifier.height(12.dp)) - InviteButtonsRow(onAcceptClicked = { }, onDeclineClicked = { }) + InviteButtonsRow( + onAcceptClicked = { + eventSink(RoomListEvents.AcceptInvite(room)) + }, + onDeclineClicked = { + eventSink(RoomListEvents.DeclineInvite(room)) + }) } } DisplayType.ROOM -> { RoomSummaryScaffoldRow( room = room, onClick = onClick, - onLongClick = onLongClick, + onLongClick = { + eventSink(RoomListEvents.ShowContextMenu(room)) + }, modifier = modifier ) { NameAndTimestampRow( @@ -133,11 +145,11 @@ private fun RoomSummaryScaffoldRow( Row( modifier = modifier - .fillMaxWidth() - .heightIn(min = minHeight) - .then(clickModifier) - .padding(horizontal = 16.dp, vertical = 11.dp) - .height(IntrinsicSize.Min), + .fillMaxWidth() + .heightIn(min = minHeight) + .then(clickModifier) + .padding(horizontal = 16.dp, vertical = 11.dp) + .height(IntrinsicSize.Min), ) { Avatar(room.avatarData) Spacer(modifier = Modifier.width(16.dp)) @@ -357,6 +369,6 @@ internal fun RoomSummaryRowPreview(@PreviewParameter(RoomListRoomSummaryProvider RoomSummaryRow( room = data, onClick = {}, - onLongClick = {} + eventSink = {}, ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt index 80657ed4fc..a3640d2d77 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt @@ -44,6 +44,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.roomlist.impl.R +import io.element.android.features.roomlist.impl.RoomListEvents import io.element.android.features.roomlist.impl.components.RoomSummaryRow import io.element.android.features.roomlist.impl.contentType import io.element.android.features.roomlist.impl.model.RoomListRoomSummary @@ -65,8 +66,8 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable internal fun RoomListSearchView( state: RoomListSearchState, + eventSink: (RoomListEvents) -> Unit, onRoomClicked: (RoomId) -> Unit, - onRoomLongClicked: (RoomListRoomSummary) -> Unit, onRoomDirectorySearchClicked: () -> Unit, modifier: Modifier = Modifier, ) { @@ -90,7 +91,7 @@ internal fun RoomListSearchView( RoomListSearchContent( state = state, onRoomClicked = onRoomClicked, - onRoomLongClicked = onRoomLongClicked, + eventSink = eventSink, onRoomDirectorySearchClicked = onRoomDirectorySearchClicked, ) } @@ -102,8 +103,8 @@ internal fun RoomListSearchView( @Composable private fun RoomListSearchContent( state: RoomListSearchState, + eventSink: (RoomListEvents) -> Unit, onRoomClicked: (RoomId) -> Unit, - onRoomLongClicked: (RoomListRoomSummary) -> Unit, onRoomDirectorySearchClicked: () -> Unit, ) { val borderColor = MaterialTheme.colorScheme.tertiary @@ -193,7 +194,7 @@ private fun RoomListSearchContent( RoomSummaryRow( room = room, onClick = ::onRoomClicked, - onLongClick = onRoomLongClicked, + eventSink = eventSink, ) } } @@ -220,7 +221,7 @@ internal fun RoomListSearchResultContentPreview(@PreviewParameter(RoomListSearch RoomListSearchContent( state = state, onRoomClicked = {}, - onRoomLongClicked = {}, + eventSink = {}, onRoomDirectorySearchClicked = {}, ) } From 43e336cb720156a8fc142360d521fad28089407d Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 15 Apr 2024 22:50:43 +0200 Subject: [PATCH 004/289] RoomList : add invite filter --- .../roomlist/impl/filters/RoomListFilter.kt | 14 ++++++++------ .../filters/RoomListFiltersEmptyStateResources.kt | 4 ++++ .../impl/filters/RoomListFiltersPresenter.kt | 1 + .../selection/DefaultFilterSelectionStrategy.kt | 2 +- .../matrix/api/roomlist/RoomListFilter.kt | 5 +++++ .../matrix/impl/roomlist/RoomListFilter.kt | 4 ++++ 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFilter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFilter.kt index 51b9570c6d..1af6979508 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFilter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFilter.kt @@ -26,13 +26,15 @@ enum class RoomListFilter(val stringResource: Int) { Unread(R.string.screen_roomlist_filter_unreads), People(R.string.screen_roomlist_filter_people), Rooms(R.string.screen_roomlist_filter_rooms), - Favourites(R.string.screen_roomlist_filter_favourites); + Favourites(R.string.screen_roomlist_filter_favourites), + Invites(R.string.screen_roomlist_filter_invites); - val oppositeFilter: RoomListFilter? + val incompatibleFilters: Set get() = when (this) { - Rooms -> People - People -> Rooms - Unread -> null - Favourites -> null + Rooms -> setOf(People, Invites) + People -> setOf(Rooms, Invites) + Unread -> setOf(Invites) + Favourites -> setOf(Invites) + Invites -> setOf(Rooms, People, Unread, Favourites) } } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersEmptyStateResources.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersEmptyStateResources.kt index 53763abd0d..5bfc274067 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersEmptyStateResources.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersEmptyStateResources.kt @@ -53,6 +53,10 @@ data class RoomListFiltersEmptyStateResources( title = R.string.screen_roomlist_filter_favourites_empty_state_title, subtitle = R.string.screen_roomlist_filter_favourites_empty_state_subtitle ) + RoomListFilter.Invites -> RoomListFiltersEmptyStateResources( + title = R.string.screen_roomlist_filter_invites_empty_state_title, + subtitle = R.string.screen_roomlist_filter_mixed_empty_state_subtitle + ) } } else -> RoomListFiltersEmptyStateResources( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt index 27edc91627..8d1ec0e86b 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt @@ -66,6 +66,7 @@ class RoomListFiltersPresenter @Inject constructor( RoomListFilter.People -> MatrixRoomListFilter.Category.People RoomListFilter.Unread -> MatrixRoomListFilter.Unread RoomListFilter.Favourites -> MatrixRoomListFilter.Favorite + RoomListFilter.Invites -> MatrixRoomListFilter.Invite } } ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/selection/DefaultFilterSelectionStrategy.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/selection/DefaultFilterSelectionStrategy.kt index d56c84a572..91d6a6d09b 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/selection/DefaultFilterSelectionStrategy.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/selection/DefaultFilterSelectionStrategy.kt @@ -54,7 +54,7 @@ class DefaultFilterSelectionStrategy @Inject constructor() : FilterSelectionStra isSelected = true ) } - val unselectedFilters = RoomListFilter.entries - selectedFilters - selectedFilters.mapNotNull { it.oppositeFilter }.toSet() + val unselectedFilters = RoomListFilter.entries - selectedFilters - selectedFilters.flatMap { it.incompatibleFilters }.toSet() val unselectedFilterStates = unselectedFilters.map { FilterSelectionState( filter = it, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListFilter.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListFilter.kt index b2262706b0..0c88d6d165 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListFilter.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListFilter.kt @@ -57,6 +57,11 @@ sealed interface RoomListFilter { */ data object Favorite : RoomListFilter + /** + * A filter that matches rooms that with Invited membership. + */ + data object Invite : RoomListFilter + /** * A filter that matches either Group or People rooms. */ diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt index f7a9e77509..e7361b4054 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.impl.roomlist +import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.roomlist.RoomListFilter import io.element.android.libraries.matrix.api.roomlist.RoomSummary @@ -40,6 +41,9 @@ val RoomListFilter.predicate is RoomListFilter.NormalizedMatchRoomName -> { roomSummary: RoomSummary -> roomSummary is RoomSummary.Filled && roomSummary.details.name.contains(pattern, ignoreCase = true) } + RoomListFilter.Invite -> { roomSummary: RoomSummary -> + roomSummary is RoomSummary.Filled && roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED + } } fun List.filter(filter: RoomListFilter): List { From 4dbcd072c0b982f31cf967fe80d5573259807f2e Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 16 Apr 2024 11:41:55 +0200 Subject: [PATCH 005/289] Invite : remove invitelist entry points --- .../android/appnav/LoggedInFlowNode.kt | 52 ----- .../invite/api/InviteListEntryPoint.kt | 38 ---- .../features/invite/api/SeenInvitesStore.kt | 25 --- .../impl/DefaultInviteListEntryPoint.kt | 45 ---- .../invite/impl/DefaultSeenInvitesStore.kt | 56 ----- .../impl/components/InviteSummaryRow.kt | 195 ------------------ .../impl/invitelist/InviteListEvents.kt | 24 --- .../invite/impl/invitelist/InviteListNode.kt | 61 ------ .../impl/invitelist/InviteListPresenter.kt | 157 -------------- .../invite/impl/invitelist/InviteListState.kt | 29 --- .../invitelist/InviteListStateProvider.kt | 77 ------- .../invite/impl/invitelist/InviteListView.kt | 148 ------------- .../impl/model/InviteListInviteSummary.kt | 40 ---- .../model/InviteListInviteSummaryProvider.kt | 41 ---- .../invitelist/InviteListPresenterTests.kt | 1 - .../invite/test/FakeSeenInvitesStore.kt | 1 - .../roomlist/api/RoomListEntryPoint.kt | 1 - .../roomlist/impl/InvitesEntryPointView.kt | 81 -------- .../impl/RoomListContentStateProvider.kt | 6 +- .../features/roomlist/impl/RoomListNode.kt | 5 - .../roomlist/impl/RoomListPresenter.kt | 9 +- .../features/roomlist/impl/RoomListState.kt | 3 +- .../roomlist/impl/RoomListStateProvider.kt | 2 - .../features/roomlist/impl/RoomListView.kt | 10 +- .../impl/components/RoomListContentView.kt | 46 +---- .../DefaultInviteStateDataSource.kt | 72 ------- .../impl/datasource/InviteStateDataSource.kt | 25 --- .../roomlist/impl/RoomListPresenterTests.kt | 1 - .../android/samples/minimal/RoomListScreen.kt | 2 - 29 files changed, 16 insertions(+), 1237 deletions(-) delete mode 100644 features/invite/api/src/main/kotlin/io/element/android/features/invite/api/InviteListEntryPoint.kt delete mode 100644 features/invite/api/src/main/kotlin/io/element/android/features/invite/api/SeenInvitesStore.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultInviteListEntryPoint.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStore.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/components/InviteSummaryRow.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListEvents.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListNode.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenter.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListState.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListStateProvider.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListView.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/model/InviteListInviteSummary.kt delete mode 100644 features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/model/InviteListInviteSummaryProvider.kt delete mode 100644 features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/InvitesEntryPointView.kt delete mode 100644 features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/DefaultInviteStateDataSource.kt delete mode 100644 features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/InviteStateDataSource.kt diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 0f6da36e26..092a4d8888 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -33,7 +33,6 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack -import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.replace import com.bumble.appyx.navmodel.backstack.operation.singleTop @@ -48,7 +47,6 @@ import io.element.android.features.createroom.api.CreateRoomEntryPoint import io.element.android.features.ftue.api.FtueEntryPoint import io.element.android.features.ftue.api.state.FtueService import io.element.android.features.ftue.api.state.FtueState -import io.element.android.features.invite.api.InviteListEntryPoint import io.element.android.features.lockscreen.api.LockScreenEntryPoint import io.element.android.features.lockscreen.api.LockScreenLockState import io.element.android.features.lockscreen.api.LockScreenService @@ -62,7 +60,6 @@ import io.element.android.features.securebackup.api.SecureBackupEntryPoint import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.architecture.waitForChildAttached import io.element.android.libraries.deeplink.DeeplinkData import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.di.AppScope @@ -70,7 +67,6 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.MAIN_SPACE import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.roomlist.RoomList import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.libraries.push.api.notifications.NotificationDrawerManager import io.element.android.services.appnavstate.api.AppNavigationStateService @@ -95,7 +91,6 @@ class LoggedInFlowNode @AssistedInject constructor( private val createRoomEntryPoint: CreateRoomEntryPoint, private val appNavigationStateService: AppNavigationStateService, private val secureBackupEntryPoint: SecureBackupEntryPoint, - private val inviteListEntryPoint: InviteListEntryPoint, private val ftueEntryPoint: FtueEntryPoint, private val coroutineScope: CoroutineScope, private val networkMonitor: NetworkMonitor, @@ -160,23 +155,6 @@ class LoggedInFlowNode @AssistedInject constructor( } ) observeSyncStateAndNetworkStatus() - observeInvitesLoadingState() - } - - private fun observeInvitesLoadingState() { - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - matrixClient.roomListService.invites.loadingState - .collect { inviteState -> - when (inviteState) { - is RoomList.LoadingState.Loaded -> if (inviteState.numberOfRooms == 0) { - backstack.removeLast(NavTarget.InviteList) - } - RoomList.LoadingState.NotLoaded -> Unit - } - } - } - } } @OptIn(FlowPreview::class) @@ -233,9 +211,6 @@ class LoggedInFlowNode @AssistedInject constructor( val initialElement: SecureBackupEntryPoint.InitialTarget = SecureBackupEntryPoint.InitialTarget.Root ) : NavTarget - @Parcelize - data object InviteList : NavTarget - @Parcelize data object Ftue : NavTarget @@ -272,10 +247,6 @@ class LoggedInFlowNode @AssistedInject constructor( backstack.push(NavTarget.SecureBackup(initialElement = SecureBackupEntryPoint.InitialTarget.EnterRecoveryKey)) } - override fun onInvitesClicked() { - backstack.push(NavTarget.InviteList) - } - override fun onRoomSettingsClicked(roomId: RoomId) { backstack.push(NavTarget.Room(roomId, initialElement = RoomNavigationTarget.Details)) } @@ -351,25 +322,6 @@ class LoggedInFlowNode @AssistedInject constructor( .params(SecureBackupEntryPoint.Params(initialElement = navTarget.initialElement)) .build() } - NavTarget.InviteList -> { - val callback = object : InviteListEntryPoint.Callback { - override fun onBackClicked() { - backstack.pop() - } - - override fun onInviteClicked(roomId: RoomId) { - backstack.push(NavTarget.Room(roomId)) - } - - override fun onInviteAccepted(roomId: RoomId) { - backstack.push(NavTarget.Room(roomId)) - } - } - - inviteListEntryPoint.nodeBuilder(this, buildContext) - .callback(callback) - .build() - } NavTarget.Ftue -> { ftueEntryPoint.nodeBuilder(this, buildContext) .callback(object : FtueEntryPoint.Callback { @@ -414,10 +366,6 @@ class LoggedInFlowNode @AssistedInject constructor( if (!canShowRoomList()) return@withContext notificationDrawerManager.clearMembershipNotificationForSession(deeplinkData.sessionId) backstack.singleTop(NavTarget.RoomList) - backstack.push(NavTarget.InviteList) - waitForChildAttached { navTarget -> - navTarget is NavTarget.InviteList - } } private fun canShowRoomList(): Boolean { diff --git a/features/invite/api/src/main/kotlin/io/element/android/features/invite/api/InviteListEntryPoint.kt b/features/invite/api/src/main/kotlin/io/element/android/features/invite/api/InviteListEntryPoint.kt deleted file mode 100644 index c5063cdbc8..0000000000 --- a/features/invite/api/src/main/kotlin/io/element/android/features/invite/api/InviteListEntryPoint.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.api - -import com.bumble.appyx.core.modality.BuildContext -import com.bumble.appyx.core.node.Node -import com.bumble.appyx.core.plugin.Plugin -import io.element.android.libraries.architecture.FeatureEntryPoint -import io.element.android.libraries.matrix.api.core.RoomId - -interface InviteListEntryPoint : FeatureEntryPoint { - fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder - - interface NodeBuilder { - fun callback(callback: Callback): NodeBuilder - fun build(): Node - } - - interface Callback : Plugin { - fun onBackClicked() - fun onInviteClicked(roomId: RoomId) - fun onInviteAccepted(roomId: RoomId) - } -} diff --git a/features/invite/api/src/main/kotlin/io/element/android/features/invite/api/SeenInvitesStore.kt b/features/invite/api/src/main/kotlin/io/element/android/features/invite/api/SeenInvitesStore.kt deleted file mode 100644 index e34b17cee8..0000000000 --- a/features/invite/api/src/main/kotlin/io/element/android/features/invite/api/SeenInvitesStore.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.api - -import io.element.android.libraries.matrix.api.core.RoomId -import kotlinx.coroutines.flow.Flow - -interface SeenInvitesStore { - fun seenRoomIds(): Flow> - suspend fun markAsSeen(roomIds: Set) -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultInviteListEntryPoint.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultInviteListEntryPoint.kt deleted file mode 100644 index 5e464a79bc..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultInviteListEntryPoint.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl - -import com.bumble.appyx.core.modality.BuildContext -import com.bumble.appyx.core.node.Node -import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.features.invite.api.InviteListEntryPoint -import io.element.android.features.invite.impl.invitelist.InviteListNode -import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject - -@ContributesBinding(AppScope::class) -class DefaultInviteListEntryPoint @Inject constructor() : InviteListEntryPoint { - override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): InviteListEntryPoint.NodeBuilder { - val plugins = ArrayList() - - return object : InviteListEntryPoint.NodeBuilder { - override fun callback(callback: InviteListEntryPoint.Callback): InviteListEntryPoint.NodeBuilder { - plugins += callback - return this - } - - override fun build(): Node { - return parentNode.createNode(buildContext, plugins) - } - } - } -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStore.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStore.kt deleted file mode 100644 index bf0423914e..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStore.kt +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl - -import android.content.Context -import androidx.datastore.core.DataStore -import androidx.datastore.preferences.core.Preferences -import androidx.datastore.preferences.core.edit -import androidx.datastore.preferences.core.stringSetPreferencesKey -import androidx.datastore.preferences.preferencesDataStore -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.features.invite.api.SeenInvitesStore -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.matrix.api.core.RoomId -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.map -import javax.inject.Inject - -private val Context.dataStore: DataStore by preferencesDataStore(name = "elementx_seeninvites") -private val seenInvitesKey = stringSetPreferencesKey("seenInvites") - -@ContributesBinding(SessionScope::class) -class DefaultSeenInvitesStore @Inject constructor( - @ApplicationContext context: Context -) : SeenInvitesStore { - private val store = context.dataStore - - override fun seenRoomIds(): Flow> = - store.data.map { prefs -> - prefs[seenInvitesKey] - .orEmpty() - .map { RoomId(it) } - .toSet() - } - - override suspend fun markAsSeen(roomIds: Set) { - store.edit { prefs -> - prefs[seenInvitesKey] = roomIds.map { it.value }.toSet() - } - } -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/components/InviteSummaryRow.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/components/InviteSummaryRow.kt deleted file mode 100644 index 0987f6cf57..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/components/InviteSummaryRow.kt +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.components - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.IntrinsicSize -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.heightIn -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.AnnotatedString -import androidx.compose.ui.text.SpanStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme -import io.element.android.features.invite.impl.R -import io.element.android.features.invite.impl.model.InviteListInviteSummary -import io.element.android.features.invite.impl.model.InviteListInviteSummaryProvider -import io.element.android.features.invite.impl.model.InviteSender -import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom -import io.element.android.libraries.designsystem.components.avatar.Avatar -import io.element.android.libraries.designsystem.preview.ElementPreview -import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.components.Button -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.ui.strings.CommonStrings - -private val minHeight = 72.dp - -@Composable -internal fun InviteSummaryRow( - invite: InviteListInviteSummary, - onAcceptClicked: () -> Unit, - onDeclineClicked: () -> Unit, - modifier: Modifier = Modifier, -) { - Box( - modifier = modifier - .fillMaxWidth() - .heightIn(min = minHeight) - ) { - DefaultInviteSummaryRow( - invite = invite, - onAcceptClicked = onAcceptClicked, - onDeclineClicked = onDeclineClicked, - ) - } -} - -@Composable -private fun DefaultInviteSummaryRow( - invite: InviteListInviteSummary, - onAcceptClicked: () -> Unit, - onDeclineClicked: () -> Unit, -) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp) - .height(IntrinsicSize.Min), - verticalAlignment = Alignment.Top - ) { - Avatar( - invite.roomAvatarData, - ) - - Column( - modifier = Modifier - .padding(start = 16.dp, end = 4.dp) - .alignByBaseline() - .weight(1f) - ) { - val bonusPadding = if (invite.isNew) 12.dp else 0.dp - - // Name - Text( - text = invite.roomName, - color = MaterialTheme.colorScheme.primary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = ElementTheme.typography.fontBodyLgMedium, - modifier = Modifier.padding(end = bonusPadding), - ) - - // ID or Alias - invite.roomAlias?.let { - Text( - style = ElementTheme.typography.fontBodyMdRegular, - text = it, - color = MaterialTheme.colorScheme.secondary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - modifier = Modifier.padding(end = bonusPadding), - ) - } - - // Sender - invite.sender?.let { sender -> - SenderRow(sender = sender) - } - - // CTAs - Row(Modifier.padding(top = 12.dp)) { - OutlinedButton( - text = stringResource(CommonStrings.action_decline), - onClick = onDeclineClicked, - modifier = Modifier.weight(1f), - size = ButtonSize.Medium, - ) - - Spacer(modifier = Modifier.width(12.dp)) - - Button( - text = stringResource(CommonStrings.action_accept), - onClick = onAcceptClicked, - modifier = Modifier.weight(1f), - size = ButtonSize.Medium, - ) - } - } - - UnreadIndicatorAtom(isVisible = invite.isNew) - } -} - -@Composable -private fun SenderRow(sender: InviteSender) { - Row( - horizontalArrangement = Arrangement.spacedBy(4.dp), - modifier = Modifier.padding(top = 6.dp), - ) { - Avatar( - avatarData = sender.avatarData, - ) - Text( - text = stringResource(R.string.screen_invites_invited_you, sender.displayName, sender.userId.value).let { text -> - val senderNameStart = LocalContext.current.getString(R.string.screen_invites_invited_you).indexOf("%1\$s") - AnnotatedString( - text = text, - spanStyles = listOf( - AnnotatedString.Range( - SpanStyle( - fontWeight = FontWeight.Medium, - color = MaterialTheme.colorScheme.primary - ), - start = senderNameStart, - end = senderNameStart + sender.displayName.length - ) - ) - ) - }, - style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, - ) - } -} - -@PreviewsDayNight -@Composable -internal fun InviteSummaryRowPreview(@PreviewParameter(InviteListInviteSummaryProvider::class) data: InviteListInviteSummary) = ElementPreview { - InviteSummaryRow( - invite = data, - onAcceptClicked = {}, - onDeclineClicked = {}, - ) -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListEvents.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListEvents.kt deleted file mode 100644 index f4ba30844a..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListEvents.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.invitelist - -import io.element.android.features.invite.impl.model.InviteListInviteSummary - -sealed interface InviteListEvents { - data class AcceptInvite(val invite: InviteListInviteSummary) : InviteListEvents - data class DeclineInvite(val invite: InviteListInviteSummary) : InviteListEvents -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListNode.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListNode.kt deleted file mode 100644 index fe491b157e..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListNode.kt +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.invitelist - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import com.bumble.appyx.core.modality.BuildContext -import com.bumble.appyx.core.node.Node -import com.bumble.appyx.core.plugin.Plugin -import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject -import io.element.android.anvilannotations.ContributesNode -import io.element.android.features.invite.api.InviteListEntryPoint -import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.matrix.api.core.RoomId - -@ContributesNode(SessionScope::class) -class InviteListNode @AssistedInject constructor( - @Assisted buildContext: BuildContext, - @Assisted plugins: List, - private val presenter: InviteListPresenter, -) : Node(buildContext, plugins = plugins) { - private fun onBackClicked() { - plugins().forEach { it.onBackClicked() } - } - - private fun onInviteAccepted(roomId: RoomId) { - plugins().forEach { it.onInviteAccepted(roomId) } - } - - private fun onInviteClicked(roomId: RoomId) { - plugins().forEach { it.onInviteClicked(roomId) } - } - - @Composable - override fun View(modifier: Modifier) { - val state = presenter.present() - InviteListView( - state = state, - onBackClicked = ::onBackClicked, - onInviteAccepted = ::onInviteAccepted, - onInviteDeclined = {}, - onInviteClicked = ::onInviteClicked, - ) - } -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenter.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenter.kt deleted file mode 100644 index 9d9a33ef13..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenter.kt +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.invitelist - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import io.element.android.features.invite.api.SeenInvitesStore -import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents -import io.element.android.features.invite.api.response.AcceptDeclineInviteState -import io.element.android.features.invite.api.response.InviteData -import io.element.android.features.invite.impl.model.InviteListInviteSummary -import io.element.android.features.invite.impl.model.InviteSender -import io.element.android.libraries.architecture.Presenter -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.MatrixClient -import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.roomlist.RoomSummary -import kotlinx.collections.immutable.toPersistentList -import kotlinx.coroutines.flow.first -import javax.inject.Inject - -class InviteListPresenter @Inject constructor( - private val client: MatrixClient, - private val store: SeenInvitesStore, - private val acceptDeclineInvitePresenter: Presenter, -) : Presenter { - @Composable - override fun present(): InviteListState { - val invites by client - .roomListService - .invites - .summaries - .collectAsState(initial = emptyList()) - - var seenInvites by remember { mutableStateOf>(emptySet()) } - - LaunchedEffect(Unit) { - seenInvites = store.seenRoomIds().first() - } - - LaunchedEffect(invites) { - store.markAsSeen( - invites - .filterIsInstance() - .map { it.details.roomId } - .toSet() - ) - } - - val acceptDeclineInviteState = acceptDeclineInvitePresenter.present() - - fun handleEvent(event: InviteListEvents) { - when (event) { - is InviteListEvents.AcceptInvite -> { - acceptDeclineInviteState.eventSink( - AcceptDeclineInviteEvents.AcceptInvite(event.invite.toInviteData()) - ) - } - - is InviteListEvents.DeclineInvite -> { - acceptDeclineInviteState.eventSink( - AcceptDeclineInviteEvents.DeclineInvite(event.invite.toInviteData()) - ) - } - } - } - - val inviteList = remember(seenInvites, invites) { - invites - .filterIsInstance() - .map { - it.toInviteSummary(seenInvites.contains(it.details.roomId)) - } - .toPersistentList() - } - - return InviteListState( - inviteList = inviteList, - acceptDeclineInviteState = acceptDeclineInviteState, - eventSink = ::handleEvent - ) - } - - private fun RoomSummary.Filled.toInviteSummary(seen: Boolean) = details.run { - val i = inviter - val avatarData = if (isDirect && i != null) { - AvatarData( - id = i.userId.value, - name = i.displayName, - url = i.avatarUrl, - size = AvatarSize.RoomInviteItem, - ) - } else { - AvatarData( - id = roomId.value, - name = name, - url = avatarUrl, - size = AvatarSize.RoomInviteItem, - ) - } - - val alias = if (isDirect) { - inviter?.userId?.value - } else { - canonicalAlias - } - - InviteListInviteSummary( - roomId = roomId, - roomName = name, - roomAlias = alias, - roomAvatarData = avatarData, - isDirect = isDirect, - isNew = !seen, - sender = inviter - ?.takeIf { !isDirect } - ?.run { - InviteSender( - userId = userId, - displayName = displayName ?: "", - avatarData = AvatarData( - id = userId.value, - name = displayName, - url = avatarUrl, - size = AvatarSize.InviteSender, - ), - ) - }, - ) - } - - private fun InviteListInviteSummary.toInviteData() = InviteData( - roomId = roomId, - roomName = roomName, - isDirect = isDirect, - ) -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListState.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListState.kt deleted file mode 100644 index 8a3cd69923..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListState.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.invitelist - -import androidx.compose.runtime.Immutable -import io.element.android.features.invite.api.response.AcceptDeclineInviteState -import io.element.android.features.invite.impl.model.InviteListInviteSummary -import kotlinx.collections.immutable.ImmutableList - -@Immutable -data class InviteListState( - val inviteList: ImmutableList, - val acceptDeclineInviteState: AcceptDeclineInviteState, - val eventSink: (InviteListEvents) -> Unit -) diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListStateProvider.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListStateProvider.kt deleted file mode 100644 index 9814b1b20d..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListStateProvider.kt +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.invitelist - -import androidx.compose.ui.tooling.preview.PreviewParameterProvider -import io.element.android.features.invite.api.response.AcceptDeclineInviteState -import io.element.android.features.invite.api.response.AcceptDeclineInviteStateProvider -import io.element.android.features.invite.api.response.anAcceptDeclineInviteState -import io.element.android.features.invite.impl.model.InviteListInviteSummary -import io.element.android.features.invite.impl.model.InviteSender -import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.core.UserId -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf - -open class InviteListStateProvider : PreviewParameterProvider { - private val acceptDeclineInviteStateProvider = AcceptDeclineInviteStateProvider() - - override val values: Sequence - get() = sequenceOf( - anInviteListState(), - anInviteListState(inviteList = persistentListOf()), - ) + acceptDeclineInviteStateProvider.values.map { acceptDeclineInviteState -> - anInviteListState(acceptDeclineInviteState = acceptDeclineInviteState) - } -} - -internal fun anInviteListState( - inviteList: ImmutableList = aInviteListInviteSummaryList(), - acceptDeclineInviteState: AcceptDeclineInviteState = anAcceptDeclineInviteState(), - eventSink: (InviteListEvents) -> Unit = {} -) = InviteListState( - inviteList = inviteList, - acceptDeclineInviteState = acceptDeclineInviteState, - eventSink = eventSink, -) - -internal fun aInviteListInviteSummaryList(): ImmutableList { - return persistentListOf( - InviteListInviteSummary( - roomId = RoomId("!id1:example.com"), - roomName = "Room 1", - roomAlias = "#room:example.org", - sender = InviteSender( - userId = UserId("@alice:example.org"), - displayName = "Alice" - ), - ), - InviteListInviteSummary( - roomId = RoomId("!id2:example.com"), - roomName = "Room 2", - sender = InviteSender( - userId = UserId("@bob:example.org"), - displayName = "Bob" - ), - ), - InviteListInviteSummary( - roomId = RoomId("!id3:example.com"), - roomName = "Alice", - roomAlias = "@alice:example.com" - ), - ) -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListView.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListView.kt deleted file mode 100644 index 16031d558c..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/invitelist/InviteListView.kt +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.invitelist - -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.consumeWindowInsets -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme -import io.element.android.features.invite.impl.R -import io.element.android.features.invite.impl.components.InviteSummaryRow -import io.element.android.features.invite.impl.response.AcceptDeclineInviteView -import io.element.android.libraries.designsystem.components.button.BackButton -import io.element.android.libraries.designsystem.preview.ElementPreview -import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle -import io.element.android.libraries.designsystem.theme.components.HorizontalDivider -import io.element.android.libraries.designsystem.theme.components.Scaffold -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.core.RoomId -import io.element.android.libraries.ui.strings.CommonStrings - -@Composable -fun InviteListView( - state: InviteListState, - onBackClicked: () -> Unit, - onInviteAccepted: (RoomId) -> Unit, - onInviteDeclined: (RoomId) -> Unit, - onInviteClicked: (RoomId) -> Unit, - modifier: Modifier = Modifier, -) { - InviteListContent( - state = state, - modifier = modifier, - onInviteClicked = onInviteClicked, - onBackClicked = onBackClicked, - ) - AcceptDeclineInviteView( - state = state.acceptDeclineInviteState, - onInviteAccepted = onInviteAccepted, - onInviteDeclined = onInviteDeclined, - ) -} - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -private fun InviteListContent( - state: InviteListState, - onBackClicked: () -> Unit, - onInviteClicked: (RoomId) -> Unit, - modifier: Modifier = Modifier, -) { - Scaffold( - modifier = modifier, - topBar = { - TopAppBar( - navigationIcon = { - BackButton(onClick = onBackClicked) - }, - title = { - Text( - text = stringResource(CommonStrings.action_invites_list), - style = ElementTheme.typography.aliasScreenTitle, - ) - } - ) - }, - content = { padding -> - Column( - modifier = Modifier - .padding(padding) - .consumeWindowInsets(padding) - ) { - if (state.inviteList.isEmpty()) { - Spacer(Modifier.size(80.dp)) - - Text( - text = stringResource(R.string.screen_invites_empty_list), - textAlign = TextAlign.Center, - color = MaterialTheme.colorScheme.tertiary, - modifier = Modifier.fillMaxWidth() - ) - } else { - LazyColumn( - modifier = Modifier.weight(1f) - ) { - itemsIndexed( - items = state.inviteList, - ) { index, invite -> - InviteSummaryRow( - modifier = Modifier.clickable( - onClick = { onInviteClicked(invite.roomId) } - ), - invite = invite, - onAcceptClicked = { state.eventSink(InviteListEvents.AcceptInvite(invite)) }, - onDeclineClicked = { state.eventSink(InviteListEvents.DeclineInvite(invite)) }, - ) - - if (index != state.inviteList.lastIndex) { - HorizontalDivider() - } - } - } - } - } - } - ) -} - -@PreviewsDayNight -@Composable -internal fun InviteListViewPreview(@PreviewParameter(InviteListStateProvider::class) state: InviteListState) = ElementPreview { - InviteListView( - state = state, - onBackClicked = {}, - onInviteAccepted = {}, - onInviteDeclined = {}, - onInviteClicked = {}, - ) -} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/model/InviteListInviteSummary.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/model/InviteListInviteSummary.kt deleted file mode 100644 index e17dcc997c..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/model/InviteListInviteSummary.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.model - -import androidx.compose.runtime.Immutable -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.core.RoomId -import io.element.android.libraries.matrix.api.core.UserId - -@Immutable -data class InviteListInviteSummary( - val roomId: RoomId, - val roomName: String = "", - val roomAlias: String? = null, - val roomAvatarData: AvatarData = AvatarData(roomId.value, roomName, size = AvatarSize.RoomInviteItem), - val sender: InviteSender? = null, - val isDirect: Boolean = false, - val isNew: Boolean = false, -) - -data class InviteSender( - val userId: UserId, - val displayName: String, - val avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender), -) diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/model/InviteListInviteSummaryProvider.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/model/InviteListInviteSummaryProvider.kt deleted file mode 100644 index 11f6742345..0000000000 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/model/InviteListInviteSummaryProvider.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.model - -import androidx.compose.ui.tooling.preview.PreviewParameterProvider -import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.core.UserId - -open class InviteListInviteSummaryProvider : PreviewParameterProvider { - override val values: Sequence - get() = sequenceOf( - aInviteListInviteSummary(), - aInviteListInviteSummary().copy(roomAlias = "#someroom-with-a-long-alias:example.com"), - aInviteListInviteSummary().copy(roomAlias = "#someroom-with-a-long-alias:example.com", isNew = true), - aInviteListInviteSummary().copy(roomName = "Alice", sender = null), - aInviteListInviteSummary().copy(isNew = true) - ) -} - -fun aInviteListInviteSummary() = InviteListInviteSummary( - roomId = RoomId("!room1:example.com"), - roomName = "Some room with a long name that will truncate", - sender = InviteSender( - userId = UserId("@alice-with-a-long-mxid:example.org"), - displayName = "Alice with a long name" - ), -) diff --git a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenterTests.kt b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenterTests.kt index c984e9c5fb..ae982e0358 100644 --- a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenterTests.kt +++ b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenterTests.kt @@ -21,7 +21,6 @@ import app.cash.molecule.moleculeFlow import app.cash.turbine.TurbineTestContext import app.cash.turbine.test import com.google.common.truth.Truth.assertThat -import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState import io.element.android.features.invite.test.FakeSeenInvitesStore diff --git a/features/invite/test/src/main/kotlin/io/element/android/features/invite/test/FakeSeenInvitesStore.kt b/features/invite/test/src/main/kotlin/io/element/android/features/invite/test/FakeSeenInvitesStore.kt index f2a21ac768..c148eca159 100644 --- a/features/invite/test/src/main/kotlin/io/element/android/features/invite/test/FakeSeenInvitesStore.kt +++ b/features/invite/test/src/main/kotlin/io/element/android/features/invite/test/FakeSeenInvitesStore.kt @@ -16,7 +16,6 @@ package io.element.android.features.invite.test -import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.libraries.matrix.api.core.RoomId import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow diff --git a/features/roomlist/api/src/main/kotlin/io/element/android/features/roomlist/api/RoomListEntryPoint.kt b/features/roomlist/api/src/main/kotlin/io/element/android/features/roomlist/api/RoomListEntryPoint.kt index b5d1c1299f..f4e2ca7b01 100644 --- a/features/roomlist/api/src/main/kotlin/io/element/android/features/roomlist/api/RoomListEntryPoint.kt +++ b/features/roomlist/api/src/main/kotlin/io/element/android/features/roomlist/api/RoomListEntryPoint.kt @@ -34,7 +34,6 @@ interface RoomListEntryPoint : FeatureEntryPoint { fun onCreateRoomClicked() fun onSettingsClicked() fun onSessionConfirmRecoveryKeyClicked() - fun onInvitesClicked() fun onRoomSettingsClicked(roomId: RoomId) fun onReportBugClicked() fun onRoomDirectorySearchClicked() diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/InvitesEntryPointView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/InvitesEntryPointView.kt deleted file mode 100644 index ea2b5d71a3..0000000000 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/InvitesEntryPointView.kt +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.roomlist.impl - -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.heightIn -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.semantics.Role -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme -import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom -import io.element.android.libraries.designsystem.preview.ElementPreview -import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.ui.strings.CommonStrings - -@Composable -fun InvitesEntryPointView( - onInvitesClicked: () -> Unit, - state: InvitesState, - modifier: Modifier = Modifier, -) { - Box( - modifier = modifier.fillMaxWidth(), - ) { - Row( - modifier = Modifier - .clip(RoundedCornerShape(8.dp)) - .clickable(role = Role.Button, onClick = onInvitesClicked) - .padding(start = 24.dp, end = 16.dp) - .align(Alignment.CenterEnd) - .heightIn(min = 40.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - Text( - text = stringResource(CommonStrings.action_invites_list), - style = ElementTheme.typography.fontBodyMdMedium, - ) - - if (state == InvitesState.NewInvites) { - Spacer(Modifier.width(8.dp)) - UnreadIndicatorAtom() - } - } - } -} - -@PreviewsDayNight -@Composable -internal fun InvitesEntryPointViewPreview(@PreviewParameter(InvitesStateProvider::class) state: InvitesState) = ElementPreview { - InvitesEntryPointView( - onInvitesClicked = {}, - state = state, - ) -} diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContentStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContentStateProvider.kt index 284abb5d0f..5581615a2e 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContentStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContentStateProvider.kt @@ -33,11 +33,9 @@ open class RoomListContentStateProvider : PreviewParameterProvider = aRoomListRoomSummaryList(), ) = RoomListContentState.Rooms( - invitesState = invitesState, securityBannerState = securityBannerState, summaries = summaries, ) @@ -46,6 +44,4 @@ internal fun aMigrationContentState() = RoomListContentState.Migration internal fun aSkeletonContentState() = RoomListContentState.Skeleton(16) -internal fun anEmptyContentState( - invitesState: InvitesState = InvitesState.NoInvites, -) = RoomListContentState.Empty(invitesState) +internal fun anEmptyContentState() = RoomListContentState.Empty diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt index c2051ceff3..912c45eb30 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt @@ -70,10 +70,6 @@ class RoomListNode @AssistedInject constructor( plugins().forEach { it.onSessionConfirmRecoveryKeyClicked() } } - private fun onInvitesClicked() { - plugins().forEach { it.onInvitesClicked() } - } - private fun onRoomSettingsClicked(roomId: RoomId) { plugins().forEach { it.onRoomSettingsClicked(roomId) } } @@ -103,7 +99,6 @@ class RoomListNode @AssistedInject constructor( onSettingsClicked = this::onOpenSettings, onCreateRoomClicked = this::onCreateRoomClicked, onConfirmRecoveryKeyClicked = this::onSessionConfirmRecoveryKeyClicked, - onInvitesClicked = this::onInvitesClicked, onRoomSettingsClicked = this::onRoomSettingsClicked, onMenuActionClicked = { onMenuActionClicked(activity, it) }, onRoomDirectorySearchClicked = this::onRoomDirectorySearchClicked, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index ce6097b512..d58398a831 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -40,7 +40,6 @@ import io.element.android.features.leaveroom.api.LeaveRoomPresenter import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.features.preferences.api.store.SessionPreferencesStore -import io.element.android.features.roomlist.impl.datasource.InviteStateDataSource import io.element.android.features.roomlist.impl.datasource.RoomListDataSource import io.element.android.features.roomlist.impl.filters.RoomListFiltersState import io.element.android.features.roomlist.impl.migration.MigrationScreenState @@ -83,7 +82,6 @@ class RoomListPresenter @Inject constructor( private val client: MatrixClient, private val networkMonitor: NetworkMonitor, private val snackbarDispatcher: SnackbarDispatcher, - private val inviteStateDataSource: InviteStateDataSource, private val leaveRoomPresenter: LeaveRoomPresenter, private val roomListDataSource: RoomListDataSource, private val featureFlagService: FeatureFlagService, @@ -209,16 +207,11 @@ class RoomListPresenter @Inject constructor( } return when { showMigration -> RoomListContentState.Migration - showEmpty -> { - val invitesState = inviteStateDataSource.inviteState() - RoomListContentState.Empty(invitesState) - } + showEmpty -> RoomListContentState.Empty showSkeleton -> RoomListContentState.Skeleton(count = 16) else -> { - val invitesState = inviteStateDataSource.inviteState() val securityBannerState by securityBannerState(securityBannerDismissed) RoomListContentState.Rooms( - invitesState = invitesState, securityBannerState = securityBannerState, summaries = roomSummaries.dataOrNull().orEmpty().toPersistentList() ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt index 0305f43bfc..ed72c622c7 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt @@ -72,9 +72,8 @@ enum class SecurityBannerState { sealed interface RoomListContentState { data object Migration : RoomListContentState data class Skeleton(val count: Int) : RoomListContentState - data class Empty(val invitesState: InvitesState) : RoomListContentState + data object Empty : RoomListContentState data class Rooms( - val invitesState: InvitesState, val securityBannerState: SecurityBannerState, val summaries: ImmutableList, ) : RoomListContentState diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index 372a14f7a7..745d14164a 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -44,8 +44,6 @@ open class RoomListStateProvider : PreviewParameterProvider { aRoomListState(), aRoomListState(snackbarMessage = SnackbarMessage(CommonStrings.common_verification_complete)), aRoomListState(hasNetworkConnection = false), - aRoomListState(contentState = aRoomsContentState(invitesState = InvitesState.SeenInvites)), - aRoomListState(contentState = aRoomsContentState(invitesState = InvitesState.NewInvites)), aRoomListState(contextMenu = aContextMenuShown(roomName = "A nice room name")), aRoomListState(contextMenu = aContextMenuShown(isFavorite = true)), aRoomListState(contentState = aRoomsContentState(securityBannerState = SecurityBannerState.RecoveryKeyConfirmation)), diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt index 212894f521..d4652cb975 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt @@ -32,7 +32,6 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import io.element.android.compound.tokens.generated.CompoundIcons -import io.element.android.features.invite.api.response.AcceptDeclineInviteView import io.element.android.features.leaveroom.api.LeaveRoomView import io.element.android.features.networkmonitor.api.ui.ConnectivityIndicatorContainer import io.element.android.features.roomlist.impl.components.RoomListContentView @@ -56,12 +55,11 @@ fun RoomListView( onSettingsClicked: () -> Unit, onConfirmRecoveryKeyClicked: () -> Unit, onCreateRoomClicked: () -> Unit, - onInvitesClicked: () -> Unit, onRoomSettingsClicked: (roomId: RoomId) -> Unit, onMenuActionClicked: (RoomListMenuAction) -> Unit, onRoomDirectorySearchClicked: () -> Unit, modifier: Modifier = Modifier, - acceptDeclineInviteView: @Composable ()->Unit, + acceptDeclineInviteView: @Composable () -> Unit, ) { ConnectivityIndicatorContainer( modifier = modifier, @@ -80,14 +78,13 @@ fun RoomListView( LeaveRoomView(state = state.leaveRoomState) RoomListScaffold( - modifier = Modifier.padding(top = topPadding), state = state, onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onRoomClicked = onRoomClicked, onOpenSettings = onSettingsClicked, onCreateRoomClicked = onCreateRoomClicked, - onInvitesClicked = onInvitesClicked, onMenuActionClicked = onMenuActionClicked, + modifier = Modifier.padding(top = topPadding), ) // This overlaid view will only be visible when state.displaySearchResults is true RoomListSearchView( @@ -114,7 +111,6 @@ private fun RoomListScaffold( onRoomClicked: (RoomId) -> Unit, onOpenSettings: () -> Unit, onCreateRoomClicked: () -> Unit, - onInvitesClicked: () -> Unit, onMenuActionClicked: (RoomListMenuAction) -> Unit, modifier: Modifier = Modifier, ) { @@ -150,7 +146,6 @@ private fun RoomListScaffold( onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onRoomClicked = ::onRoomClicked, onCreateRoomClicked = onCreateRoomClicked, - onInvitesClicked = onInvitesClicked, modifier = Modifier .padding(padding) .consumeWindowInsets(padding) @@ -186,7 +181,6 @@ internal fun RoomListViewPreview(@PreviewParameter(RoomListStateProvider::class) onSettingsClicked = {}, onConfirmRecoveryKeyClicked = {}, onCreateRoomClicked = {}, - onInvitesClicked = {}, onRoomSettingsClicked = {}, onMenuActionClicked = {}, onRoomDirectorySearchClicked = {}, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt index f49d879e02..1b1c760889 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt @@ -44,8 +44,6 @@ import androidx.compose.ui.unit.Velocity import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons -import io.element.android.features.roomlist.impl.InvitesEntryPointView -import io.element.android.features.roomlist.impl.InvitesState import io.element.android.features.roomlist.impl.R import io.element.android.features.roomlist.impl.RoomListContentState import io.element.android.features.roomlist.impl.RoomListContentStateProvider @@ -76,7 +74,6 @@ fun RoomListContentView( onConfirmRecoveryKeyClicked: () -> Unit, onRoomClicked: (RoomListRoomSummary) -> Unit, onCreateRoomClicked: () -> Unit, - onInvitesClicked: () -> Unit, modifier: Modifier = Modifier, ) { Box(modifier = modifier) { @@ -91,8 +88,6 @@ fun RoomListContentView( } is RoomListContentState.Empty -> { EmptyView( - state = contentState, - onInvitesClicked = onInvitesClicked, onCreateRoomClicked = onCreateRoomClicked, ) } @@ -103,7 +98,6 @@ fun RoomListContentView( eventSink = eventSink, onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onRoomClicked = onRoomClicked, - onInvitesClicked = onInvitesClicked, ) } } @@ -126,30 +120,21 @@ private fun SkeletonView(count: Int, modifier: Modifier = Modifier) { @Composable private fun EmptyView( - state: RoomListContentState.Empty, onCreateRoomClicked: () -> Unit, - onInvitesClicked: () -> Unit, modifier: Modifier = Modifier ) { - Box( + EmptyScaffold( + title = R.string.screen_roomlist_empty_title, + subtitle = R.string.screen_roomlist_empty_message, + action = { + Button( + text = stringResource(CommonStrings.action_start_chat), + leadingIcon = IconSource.Vector(CompoundIcons.Compose()), + onClick = onCreateRoomClicked, + ) + }, modifier = modifier.fillMaxSize(), - ) { - if (state.invitesState != InvitesState.NoInvites) { - InvitesEntryPointView(onInvitesClicked, state.invitesState) - } - EmptyScaffold( - title = R.string.screen_roomlist_empty_title, - subtitle = R.string.screen_roomlist_empty_message, - action = { - Button( - text = stringResource(CommonStrings.action_start_chat), - leadingIcon = IconSource.Vector(CompoundIcons.Compose()), - onClick = onCreateRoomClicked, - ) - }, - modifier = Modifier.fillMaxSize(), - ) - } + ) } @Composable @@ -159,7 +144,6 @@ private fun RoomsView( eventSink: (RoomListEvents) -> Unit, onConfirmRecoveryKeyClicked: () -> Unit, onRoomClicked: (RoomListRoomSummary) -> Unit, - onInvitesClicked: () -> Unit, modifier: Modifier = Modifier, ) { if (state.summaries.isEmpty() && filtersState.hasAnyFilterSelected) { @@ -173,7 +157,6 @@ private fun RoomsView( eventSink = eventSink, onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onRoomClicked = onRoomClicked, - onInvitesClicked = onInvitesClicked, modifier = modifier.fillMaxSize(), ) } @@ -185,7 +168,6 @@ private fun RoomsViewList( eventSink: (RoomListEvents) -> Unit, onConfirmRecoveryKeyClicked: () -> Unit, onRoomClicked: (RoomListRoomSummary) -> Unit, - onInvitesClicked: () -> Unit, modifier: Modifier = Modifier, ) { val lazyListState = rememberLazyListState() @@ -223,11 +205,6 @@ private fun RoomsViewList( else -> Unit } - if (state.invitesState != InvitesState.NoInvites) { - item { - InvitesEntryPointView(onInvitesClicked, state.invitesState) - } - } // Note: do not use a key for the LazyColumn, or the scroll will not behave as expected if a room // is moved to the top of the list. itemsIndexed( @@ -301,6 +278,5 @@ internal fun RoomListContentViewPreview(@PreviewParameter(RoomListContentStatePr onConfirmRecoveryKeyClicked = {}, onRoomClicked = {}, onCreateRoomClicked = {}, - onInvitesClicked = {} ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/DefaultInviteStateDataSource.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/DefaultInviteStateDataSource.kt deleted file mode 100644 index 16baf4e41b..0000000000 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/DefaultInviteStateDataSource.kt +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.roomlist.impl.datasource - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.features.invite.api.SeenInvitesStore -import io.element.android.features.roomlist.impl.InvitesState -import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.matrix.api.MatrixClient -import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.roomlist.RoomSummary -import kotlinx.coroutines.withContext -import javax.inject.Inject - -@ContributesBinding(SessionScope::class) -class DefaultInviteStateDataSource @Inject constructor( - private val client: MatrixClient, - private val seenInvitesStore: SeenInvitesStore, - private val coroutineDispatchers: CoroutineDispatchers, -) : InviteStateDataSource { - @Composable - override fun inviteState(): InvitesState { - val invites by client - .roomListService - .invites - .summaries - .collectAsState(initial = emptyList()) - - val seenInvites by seenInvitesStore - .seenRoomIds() - .collectAsState(initial = emptySet()) - - var state by remember { mutableStateOf(InvitesState.NoInvites) } - - LaunchedEffect(invites, seenInvites) { - withContext(coroutineDispatchers.computation) { - state = when { - invites.isEmpty() -> InvitesState.NoInvites - seenInvites.containsAll(invites.roomIds) -> InvitesState.SeenInvites - else -> InvitesState.NewInvites - } - } - } - - return state - } -} - -private val List.roomIds: Collection - get() = filterIsInstance().map { it.details.roomId } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/InviteStateDataSource.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/InviteStateDataSource.kt deleted file mode 100644 index 866bed1efd..0000000000 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/InviteStateDataSource.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.roomlist.impl.datasource - -import androidx.compose.runtime.Composable -import io.element.android.features.roomlist.impl.InvitesState - -interface InviteStateDataSource { - @Composable - fun inviteState(): InvitesState -} diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt index 0f2c288a63..9bcbf64d7d 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt @@ -28,7 +28,6 @@ import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.test.FakeNetworkMonitor import io.element.android.features.preferences.api.store.SessionPreferencesStore import io.element.android.features.roomlist.impl.datasource.FakeInviteDataSource -import io.element.android.features.roomlist.impl.datasource.InviteStateDataSource import io.element.android.features.roomlist.impl.datasource.RoomListDataSource import io.element.android.features.roomlist.impl.datasource.RoomListRoomSummaryFactory import io.element.android.features.roomlist.impl.filters.RoomListFiltersState diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt index 48f629af4d..a7916a13da 100644 --- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt +++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt @@ -20,12 +20,10 @@ import android.content.Context import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.ui.Modifier -import io.element.android.features.invite.impl.DefaultSeenInvitesStore import io.element.android.features.leaveroom.impl.LeaveRoomPresenterImpl import io.element.android.features.networkmonitor.impl.NetworkMonitorImpl import io.element.android.features.roomlist.impl.RoomListPresenter import io.element.android.features.roomlist.impl.RoomListView -import io.element.android.features.roomlist.impl.datasource.DefaultInviteStateDataSource import io.element.android.features.roomlist.impl.datasource.RoomListDataSource import io.element.android.features.roomlist.impl.datasource.RoomListRoomSummaryFactory import io.element.android.features.roomlist.impl.filters.RoomListFiltersPresenter From 3e1319115359d323932f6778d5fe9744dda32064 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 16 Apr 2024 11:53:40 +0200 Subject: [PATCH 006/289] RoomList : make invite filter truly exclusive --- .../libraries/matrix/impl/roomlist/RoomListFilter.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt index e7361b4054..3aac08c823 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt @@ -26,23 +26,24 @@ val RoomListFilter.predicate is RoomListFilter.Any -> { _: RoomSummary -> true } RoomListFilter.None -> { _: RoomSummary -> false } RoomListFilter.Category.Group -> { roomSummary: RoomSummary -> - roomSummary is RoomSummary.Filled && !roomSummary.details.isDirect + roomSummary is RoomSummary.Filled && !roomSummary.details.isDirect && !roomSummary.isInvited() } RoomListFilter.Category.People -> { roomSummary: RoomSummary -> - roomSummary is RoomSummary.Filled && roomSummary.details.isDirect + roomSummary is RoomSummary.Filled && roomSummary.details.isDirect && !roomSummary.isInvited() } RoomListFilter.Favorite -> { roomSummary: RoomSummary -> - roomSummary is RoomSummary.Filled && roomSummary.details.isFavorite + roomSummary is RoomSummary.Filled && roomSummary.details.isFavorite && !roomSummary.isInvited() } RoomListFilter.Unread -> { roomSummary: RoomSummary -> roomSummary is RoomSummary.Filled && + !roomSummary.isInvited() && (roomSummary.details.numUnreadNotifications > 0 || roomSummary.details.isMarkedUnread) } is RoomListFilter.NormalizedMatchRoomName -> { roomSummary: RoomSummary -> roomSummary is RoomSummary.Filled && roomSummary.details.name.contains(pattern, ignoreCase = true) } RoomListFilter.Invite -> { roomSummary: RoomSummary -> - roomSummary is RoomSummary.Filled && roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED + roomSummary.isInvited() } } @@ -59,3 +60,5 @@ fun List.filter(filter: RoomListFilter): List { else -> filter(filter.predicate) } } + +private fun RoomSummary.isInvited() = this is RoomSummary.Filled && this.details.currentUserMembership == CurrentUserMembership.INVITED From 997c4606c66e5c7a3089ff56c9dcb31c0c3eeafa Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 16 Apr 2024 13:20:43 +0200 Subject: [PATCH 007/289] Invites : open room instead of invite list when clicking an invite notification --- .../io/element/android/x/intent/IntentProviderImpl.kt | 6 ------ .../kotlin/io/element/android/appnav/LoggedInFlowNode.kt | 6 ------ .../kotlin/io/element/android/appnav/RootFlowNode.kt | 1 - .../io/element/android/libraries/deeplink/Constants.kt | 4 ---- .../android/libraries/deeplink/DeepLinkCreator.kt | 9 --------- .../element/android/libraries/deeplink/DeeplinkData.kt | 2 -- .../element/android/libraries/deeplink/DeeplinkParser.kt | 1 - .../android/libraries/deeplink/DeepLinkCreatorTest.kt | 6 ------ .../android/libraries/deeplink/DeeplinkParserTest.kt | 4 ---- .../android/libraries/push/impl/intent/IntentProvider.kt | 4 ---- .../impl/notifications/factories/NotificationCreator.kt | 2 +- .../impl/notifications/factories/PendingIntentFactory.kt | 5 ----- 12 files changed, 1 insertion(+), 49 deletions(-) diff --git a/app/src/main/kotlin/io/element/android/x/intent/IntentProviderImpl.kt b/app/src/main/kotlin/io/element/android/x/intent/IntentProviderImpl.kt index 88a86b9467..0e8e9b5f29 100644 --- a/app/src/main/kotlin/io/element/android/x/intent/IntentProviderImpl.kt +++ b/app/src/main/kotlin/io/element/android/x/intent/IntentProviderImpl.kt @@ -46,10 +46,4 @@ class IntentProviderImpl @Inject constructor( } } - override fun getInviteListIntent(sessionId: SessionId): Intent { - return Intent(context, MainActivity::class.java).apply { - action = Intent.ACTION_VIEW - data = deepLinkCreator.inviteList(sessionId).toUri() - } - } } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 092a4d8888..46f84a73eb 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -362,12 +362,6 @@ class LoggedInFlowNode @AssistedInject constructor( } } - internal suspend fun attachInviteList(deeplinkData: DeeplinkData.InviteList) = withContext(lifecycleScope.coroutineContext) { - if (!canShowRoomList()) return@withContext - notificationDrawerManager.clearMembershipNotificationForSession(deeplinkData.sessionId) - backstack.singleTop(NavTarget.RoomList) - } - private fun canShowRoomList(): Boolean { return ftueService.state.value is FtueState.Complete } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index d310a02b99..a3cbfb7d77 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -290,7 +290,6 @@ class RootFlowNode @AssistedInject constructor( when (deeplinkData) { is DeeplinkData.Root -> attachRoomList() is DeeplinkData.Room -> attachRoom(deeplinkData.roomId) - is DeeplinkData.InviteList -> attachInviteList(deeplinkData) } } } diff --git a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/Constants.kt b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/Constants.kt index d16d31fb82..df26ef2fa0 100644 --- a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/Constants.kt +++ b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/Constants.kt @@ -18,7 +18,3 @@ package io.element.android.libraries.deeplink internal const val SCHEME = "elementx" internal const val HOST = "open" - -object DeepLinkPaths { - const val INVITE_LIST = "invites" -} diff --git a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeepLinkCreator.kt b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeepLinkCreator.kt index 0cf2a7fca8..5f7dd339e4 100644 --- a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeepLinkCreator.kt +++ b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeepLinkCreator.kt @@ -36,13 +36,4 @@ class DeepLinkCreator @Inject constructor() { } } } - - fun inviteList(sessionId: SessionId): String { - return buildString { - append("$SCHEME://$HOST/") - append(sessionId.value) - append("/") - append(DeepLinkPaths.INVITE_LIST) - } - } } diff --git a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkData.kt b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkData.kt index aa373411c7..85fa57d413 100644 --- a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkData.kt +++ b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkData.kt @@ -30,6 +30,4 @@ sealed interface DeeplinkData { /** The target is a room, with the given [sessionId], [roomId] and optionally a [threadId]. */ data class Room(override val sessionId: SessionId, val roomId: RoomId, val threadId: ThreadId?) : DeeplinkData - /** The target is the invites list, with the given [sessionId]. */ - data class InviteList(override val sessionId: SessionId) : DeeplinkData } diff --git a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkParser.kt b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkParser.kt index 7a5f9d5772..93548b8248 100644 --- a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkParser.kt +++ b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkParser.kt @@ -39,7 +39,6 @@ class DeeplinkParser @Inject constructor() { return when (val screenPathComponent = pathBits.elementAtOrNull(1)) { null -> DeeplinkData.Root(sessionId) - DeepLinkPaths.INVITE_LIST -> DeeplinkData.InviteList(sessionId) else -> { val roomId = screenPathComponent.let(::RoomId) val threadId = pathBits.elementAtOrNull(2)?.let(::ThreadId) diff --git a/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeepLinkCreatorTest.kt b/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeepLinkCreatorTest.kt index 5c43624655..664b61cbdc 100644 --- a/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeepLinkCreatorTest.kt +++ b/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeepLinkCreatorTest.kt @@ -34,10 +34,4 @@ class DeepLinkCreatorTest { .isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId") } - @Test - fun inviteList() { - val sut = DeepLinkCreator() - assertThat(sut.inviteList(A_SESSION_ID)) - .isEqualTo("elementx://open/@alice:server.org/invites") - } } diff --git a/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeeplinkParserTest.kt b/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeeplinkParserTest.kt index 553850a4d6..b11b2f620c 100644 --- a/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeeplinkParserTest.kt +++ b/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeeplinkParserTest.kt @@ -36,8 +36,6 @@ class DeeplinkParserTest { "elementx://open/@alice:server.org/!aRoomId:domain" const val A_URI_WITH_ROOM_WITH_THREAD = "elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId" - const val A_URI_FOR_INVITE_LIST = - "elementx://open/@alice:server.org/invites" } private val sut = DeeplinkParser() @@ -50,8 +48,6 @@ class DeeplinkParserTest { .isEqualTo(DeeplinkData.Room(A_SESSION_ID, A_ROOM_ID, null)) assertThat(sut.getFromIntent(createIntent(A_URI_WITH_ROOM_WITH_THREAD))) .isEqualTo(DeeplinkData.Room(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID)) - assertThat(sut.getFromIntent(createIntent(A_URI_FOR_INVITE_LIST))) - .isEqualTo(DeeplinkData.InviteList(A_SESSION_ID)) } @Test diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/intent/IntentProvider.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/intent/IntentProvider.kt index 8e0dd3e6f2..22d745d92a 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/intent/IntentProvider.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/intent/IntentProvider.kt @@ -31,8 +31,4 @@ interface IntentProvider { threadId: ThreadId?, ): Intent - /** - * Provide an intent to start the application on the invite list. - */ - fun getInviteListIntent(sessionId: SessionId): Intent } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt index 67c8973d13..434504dd69 100755 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt @@ -157,7 +157,7 @@ class NotificationCreator @Inject constructor( // .addAction(acceptInvitationActionFactory.create(inviteNotifiableEvent)) .apply { // Build the pending intent for when the notification is clicked - setContentIntent(pendingIntentFactory.createInviteListPendingIntent(inviteNotifiableEvent.sessionId)) + setContentIntent(pendingIntentFactory.createOpenRoomPendingIntent(inviteNotifiableEvent.sessionId, inviteNotifiableEvent.roomId)) if (inviteNotifiableEvent.noisy) { // Compat diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt index 9752c621d5..f51eea74dd 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt @@ -128,9 +128,4 @@ class PendingIntentFactory @Inject constructor( PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) } - - fun createInviteListPendingIntent(sessionId: SessionId): PendingIntent { - val intent = intentProvider.getInviteListIntent(sessionId) - return PendingIntentCompat.getActivity(context, 0, intent, 0, false)!! - } } From e72983f1b8ac1ef63a12e4b9804ae71ab3a5ce1b Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 16 Apr 2024 15:45:57 +0200 Subject: [PATCH 008/289] RoomList invites : update and remove tests --- features/invite/impl/build.gradle.kts | 1 - .../invitelist/InviteListPresenterTests.kt | 265 ------------------ features/invite/test/build.gradle.kts | 29 -- .../invite/test/FakeSeenInvitesStore.kt | 38 --- features/joinroom/impl/build.gradle.kts | 1 - features/roomlist/impl/build.gradle.kts | 1 - .../roomlist/impl/RoomListPresenter.kt | 14 +- .../roomlist/impl/RoomListStateProvider.kt | 18 +- .../features/roomlist/impl/RoomListView.kt | 2 +- .../impl/components/RoomSummaryRow.kt | 10 +- .../datasource/RoomListRoomSummaryFactory.kt | 10 +- .../impl/model/RoomListRoomSummary.kt | 6 +- .../impl/model/RoomListRoomSummaryProvider.kt | 10 +- ...splayType.kt => RoomSummaryDisplayType.kt} | 2 +- .../roomlist/impl/RoomListPresenterTests.kt | 91 +++--- .../roomlist/impl/RoomListViewTest.kt | 29 +- .../DefaultInviteStateDataSourceTest.kt | 134 --------- .../impl/datasource/FakeInviteDataSource.kt | 33 --- .../filters/RoomListFiltersPresenterTests.kt | 2 + .../impl/model/RoomListRoomSummaryTest.kt | 14 +- .../matrix/test/room/RoomSummaryFixture.kt | 2 + .../factories/FakeIntentProvider.kt | 2 - samples/minimal/build.gradle.kts | 1 + .../android/samples/minimal/RoomListScreen.kt | 13 +- 24 files changed, 144 insertions(+), 584 deletions(-) delete mode 100644 features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenterTests.kt delete mode 100644 features/invite/test/build.gradle.kts delete mode 100644 features/invite/test/src/main/kotlin/io/element/android/features/invite/test/FakeSeenInvitesStore.kt rename features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/{DisplayType.kt => RoomSummaryDisplayType.kt} (95%) delete mode 100644 features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/datasource/DefaultInviteStateDataSourceTest.kt delete mode 100644 features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/datasource/FakeInviteDataSource.kt diff --git a/features/invite/impl/build.gradle.kts b/features/invite/impl/build.gradle.kts index 7a0b0db372..87e21ac562 100644 --- a/features/invite/impl/build.gradle.kts +++ b/features/invite/impl/build.gradle.kts @@ -50,7 +50,6 @@ dependencies { testImplementation(libs.test.turbine) testImplementation(projects.libraries.matrix.test) testImplementation(projects.libraries.push.test) - testImplementation(projects.features.invite.test) testImplementation(projects.services.analytics.test) testImplementation(projects.tests.testutils) diff --git a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenterTests.kt b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenterTests.kt deleted file mode 100644 index ae982e0358..0000000000 --- a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/invitelist/InviteListPresenterTests.kt +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.impl.invitelist - -import app.cash.molecule.RecompositionMode -import app.cash.molecule.moleculeFlow -import app.cash.turbine.TurbineTestContext -import app.cash.turbine.test -import com.google.common.truth.Truth.assertThat -import io.element.android.features.invite.api.response.AcceptDeclineInviteState -import io.element.android.features.invite.api.response.anAcceptDeclineInviteState -import io.element.android.features.invite.test.FakeSeenInvitesStore -import io.element.android.libraries.architecture.Presenter -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.MatrixClient -import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.room.RoomMembershipState -import io.element.android.libraries.matrix.api.roomlist.RoomSummary -import io.element.android.libraries.matrix.test.AN_AVATAR_URL -import io.element.android.libraries.matrix.test.A_ROOM_ID -import io.element.android.libraries.matrix.test.A_ROOM_ID_2 -import io.element.android.libraries.matrix.test.A_ROOM_NAME -import io.element.android.libraries.matrix.test.A_USER_ID -import io.element.android.libraries.matrix.test.A_USER_NAME -import io.element.android.libraries.matrix.test.FakeMatrixClient -import io.element.android.libraries.matrix.test.room.aRoomMember -import io.element.android.libraries.matrix.test.room.aRoomSummaryDetails -import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService -import io.element.android.tests.testutils.WarmUpRule -import kotlinx.coroutines.test.runTest -import org.junit.Rule -import org.junit.Test - -class InviteListPresenterTests { - @get:Rule - val warmUpRule = WarmUpRule() - - @Test - fun `present - starts empty, adds invites when received`() = runTest { - val roomListService = FakeRoomListService() - val presenter = createInviteListPresenter( - FakeMatrixClient(roomListService = roomListService) - ) - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { - val initialState = awaitItem() - assertThat(initialState.inviteList).isEmpty() - - roomListService.postInviteRooms(listOf(aRoomSummary())) - - val withInviteState = awaitItem() - assertThat(withInviteState.inviteList.size).isEqualTo(1) - assertThat(withInviteState.inviteList[0].roomId).isEqualTo(A_ROOM_ID) - assertThat(withInviteState.inviteList[0].roomName).isEqualTo(A_ROOM_NAME) - } - } - - @Test - fun `present - uses user ID and avatar for direct invites`() = runTest { - val roomListService = FakeRoomListService().withDirectChatInvitation() - val presenter = createInviteListPresenter( - FakeMatrixClient(roomListService = roomListService) - ) - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { - val withInviteState = awaitInitialItem() - assertThat(withInviteState.inviteList.size).isEqualTo(1) - assertThat(withInviteState.inviteList[0].roomId).isEqualTo(A_ROOM_ID) - assertThat(withInviteState.inviteList[0].roomAlias).isEqualTo(A_USER_ID.value) - assertThat(withInviteState.inviteList[0].roomName).isEqualTo(A_ROOM_NAME) - assertThat(withInviteState.inviteList[0].roomAvatarData).isEqualTo( - AvatarData( - id = A_USER_ID.value, - name = A_USER_NAME, - url = AN_AVATAR_URL, - size = AvatarSize.RoomInviteItem, - ) - ) - assertThat(withInviteState.inviteList[0].sender).isNull() - } - } - - @Test - fun `present - includes sender details for room invites`() = runTest { - val roomListService = FakeRoomListService().withRoomInvitation() - val presenter = createInviteListPresenter( - FakeMatrixClient(roomListService = roomListService) - ) - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { - val withInviteState = awaitInitialItem() - assertThat(withInviteState.inviteList.size).isEqualTo(1) - assertThat(withInviteState.inviteList[0].sender?.displayName).isEqualTo(A_USER_NAME) - assertThat(withInviteState.inviteList[0].sender?.userId).isEqualTo(A_USER_ID) - assertThat(withInviteState.inviteList[0].sender?.avatarData).isEqualTo( - AvatarData( - id = A_USER_ID.value, - name = A_USER_NAME, - url = AN_AVATAR_URL, - size = AvatarSize.InviteSender, - ) - ) - } - } - - @Test - fun `present - stores seen invites when received`() = runTest { - val roomListService = FakeRoomListService() - val store = FakeSeenInvitesStore() - val presenter = createInviteListPresenter( - FakeMatrixClient( - roomListService = roomListService, - ), - store, - ) - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { - awaitItem() - - // When one invite is received, that ID is saved - roomListService.postInviteRooms(listOf(aRoomSummary())) - - awaitItem() - assertThat(store.getProvidedRoomIds()).isEqualTo(setOf(A_ROOM_ID)) - - // When a second is added, both are saved - roomListService.postInviteRooms(listOf(aRoomSummary(), aRoomSummary(A_ROOM_ID_2))) - - awaitItem() - assertThat(store.getProvidedRoomIds()).isEqualTo(setOf(A_ROOM_ID, A_ROOM_ID_2)) - - // When they're both dismissed, an empty set is saved - roomListService.postInviteRooms(listOf()) - - awaitItem() - assertThat(store.getProvidedRoomIds()).isEmpty() - } - } - - @Test - fun `present - marks invite as new if they're unseen`() = runTest { - val roomListService = FakeRoomListService() - val store = FakeSeenInvitesStore() - store.publishRoomIds(setOf(A_ROOM_ID)) - val presenter = createInviteListPresenter( - FakeMatrixClient( - roomListService = roomListService, - ), - store, - ) - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { - awaitItem() - - roomListService.postInviteRooms(listOf(aRoomSummary(), aRoomSummary(A_ROOM_ID_2))) - skipItems(1) - - val withInviteState = awaitItem() - assertThat(withInviteState.inviteList.size).isEqualTo(2) - assertThat(withInviteState.inviteList[0].roomId).isEqualTo(A_ROOM_ID) - assertThat(withInviteState.inviteList[0].isNew).isFalse() - assertThat(withInviteState.inviteList[1].roomId).isEqualTo(A_ROOM_ID_2) - assertThat(withInviteState.inviteList[1].isNew).isTrue() - } - } - - private suspend fun FakeRoomListService.withRoomInvitation(): FakeRoomListService { - postInviteRooms( - listOf( - RoomSummary.Filled( - aRoomSummaryDetails( - roomId = A_ROOM_ID, - name = A_ROOM_NAME, - avatarUrl = null, - isDirect = false, - lastMessage = null, - inviter = aRoomMember( - userId = A_USER_ID, - displayName = A_USER_NAME, - avatarUrl = AN_AVATAR_URL, - membership = RoomMembershipState.JOIN, - isNameAmbiguous = false, - powerLevel = 0, - normalizedPowerLevel = 0, - isIgnored = false, - ) - ) - ) - ) - ) - return this - } - - private suspend fun FakeRoomListService.withDirectChatInvitation(): FakeRoomListService { - postInviteRooms( - listOf( - RoomSummary.Filled( - aRoomSummaryDetails( - roomId = A_ROOM_ID, - name = A_ROOM_NAME, - avatarUrl = null, - isDirect = true, - lastMessage = null, - inviter = aRoomMember( - userId = A_USER_ID, - displayName = A_USER_NAME, - avatarUrl = AN_AVATAR_URL, - membership = RoomMembershipState.JOIN, - isNameAmbiguous = false, - powerLevel = 0, - normalizedPowerLevel = 0, - isIgnored = false, - ) - ) - ) - ) - ) - return this - } - - private fun aRoomSummary(id: RoomId = A_ROOM_ID) = RoomSummary.Filled( - aRoomSummaryDetails( - roomId = id, - name = A_ROOM_NAME, - avatarUrl = null, - isDirect = false, - lastMessage = null, - ) - ) - - private suspend fun TurbineTestContext.awaitInitialItem(): InviteListState { - skipItems(1) - return awaitItem() - } - - private fun createInviteListPresenter( - client: MatrixClient, - seenInvitesStore: SeenInvitesStore = FakeSeenInvitesStore(), - acceptDeclineInvitePresenter: Presenter = Presenter { anAcceptDeclineInviteState() }, - ) = InviteListPresenter( - client, - seenInvitesStore, - acceptDeclineInvitePresenter = acceptDeclineInvitePresenter, - ) -} diff --git a/features/invite/test/build.gradle.kts b/features/invite/test/build.gradle.kts deleted file mode 100644 index 44d9d3030c..0000000000 --- a/features/invite/test/build.gradle.kts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2022 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -plugins { - id("io.element.android-library") -} - -android { - namespace = "io.element.android.features.invite.test" -} - -dependencies { - implementation(libs.coroutines.core) - implementation(projects.libraries.matrix.api) - api(projects.features.invite.api) -} diff --git a/features/invite/test/src/main/kotlin/io/element/android/features/invite/test/FakeSeenInvitesStore.kt b/features/invite/test/src/main/kotlin/io/element/android/features/invite/test/FakeSeenInvitesStore.kt deleted file mode 100644 index c148eca159..0000000000 --- a/features/invite/test/src/main/kotlin/io/element/android/features/invite/test/FakeSeenInvitesStore.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.invite.test - -import io.element.android.libraries.matrix.api.core.RoomId -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow - -class FakeSeenInvitesStore : SeenInvitesStore { - private val existing = MutableStateFlow(emptySet()) - private var provided: Set? = null - - fun publishRoomIds(invites: Set) { - existing.value = invites - } - - fun getProvidedRoomIds() = provided - - override fun seenRoomIds(): Flow> = existing - - override suspend fun markAsSeen(roomIds: Set) { - provided = roomIds.toSet() - } -} diff --git a/features/joinroom/impl/build.gradle.kts b/features/joinroom/impl/build.gradle.kts index cfdddcfee8..03d3051546 100644 --- a/features/joinroom/impl/build.gradle.kts +++ b/features/joinroom/impl/build.gradle.kts @@ -49,7 +49,6 @@ dependencies { testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(projects.libraries.matrix.test) - testImplementation(projects.features.invite.test) testImplementation(projects.tests.testutils) ksp(libs.showkase.processor) diff --git a/features/roomlist/impl/build.gradle.kts b/features/roomlist/impl/build.gradle.kts index ff67ebe42a..e4eaf9b20e 100644 --- a/features/roomlist/impl/build.gradle.kts +++ b/features/roomlist/impl/build.gradle.kts @@ -75,7 +75,6 @@ dependencies { testImplementation(projects.libraries.indicator.impl) testImplementation(projects.libraries.permissions.noop) testImplementation(projects.libraries.preferences.test) - testImplementation(projects.features.invite.test) testImplementation(projects.services.analytics.test) testImplementation(projects.features.networkmonitor.test) testImplementation(projects.tests.testutils) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index d58398a831..edd237f56b 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -74,6 +74,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.takeWhile import kotlinx.coroutines.launch +import org.jetbrains.annotations.VisibleForTesting import javax.inject.Inject private const val EXTENDED_RANGE_SIZE = 40 @@ -292,10 +293,11 @@ class RoomListPresenter @Inject constructor( val extendedRange = IntRange(extendedRangeStart, extendedRangeEnd) client.roomListService.updateAllRoomsVisibleRange(extendedRange) } - - private fun RoomListRoomSummary.toInviteData() = InviteData( - roomId = roomId, - roomName = name, - isDirect = isDirect, - ) } + +@VisibleForTesting +internal fun RoomListRoomSummary.toInviteData() = InviteData( + roomId = roomId, + roomName = name, + isDirect = isDirect, +) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index 745d14164a..3b53723565 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -23,7 +23,8 @@ import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState import io.element.android.features.roomlist.impl.filters.RoomListFiltersState import io.element.android.features.roomlist.impl.filters.aRoomListFiltersState -import io.element.android.features.roomlist.impl.model.DisplayType +import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType +import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.aRoomListRoomSummary import io.element.android.features.roomlist.impl.search.RoomListSearchState @@ -83,6 +84,17 @@ internal fun aRoomListState( internal fun aRoomListRoomSummaryList(): ImmutableList { return persistentListOf( + aRoomListRoomSummary( + name = "Room Invited", + avatarData = AvatarData("!roomId", "Room with Alice and Bob", size = AvatarSize.RoomListItem), + id = "!roomId:domain", + inviteSender = InviteSender( + userId = UserId("@bob:domain"), + displayName = "Bob", + avatarData = AvatarData("@bob:domain", "Bob", size = AvatarSize.InviteSender), + ), + displayType = RoomSummaryDisplayType.INVITE, + ), aRoomListRoomSummary( name = "Room", numberOfUnreadMessages = 1, @@ -101,11 +113,11 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { ), aRoomListRoomSummary( id = "!roomId3:domain", - displayType = DisplayType.PLACEHOLDER, + displayType = RoomSummaryDisplayType.PLACEHOLDER, ), aRoomListRoomSummary( id = "!roomId4:domain", - displayType = DisplayType.PLACEHOLDER, + displayType = RoomSummaryDisplayType.PLACEHOLDER, ), ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt index d4652cb975..fe874a037b 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt @@ -170,7 +170,7 @@ private fun RoomListScaffold( ) } -internal fun RoomListRoomSummary.contentType() = type.ordinal +internal fun RoomListRoomSummary.contentType() = displayType.ordinal @PreviewsDayNight @Composable diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index ecc9b0bd83..0d30d93f47 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -47,7 +47,7 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.roomlist.impl.RoomListEvents -import io.element.android.features.roomlist.impl.model.DisplayType +import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryProvider @@ -78,11 +78,11 @@ internal fun RoomSummaryRow( eventSink: (RoomListEvents) -> Unit, modifier: Modifier = Modifier, ) { - when (room.type) { - DisplayType.PLACEHOLDER -> { + when (room.displayType) { + RoomSummaryDisplayType.PLACEHOLDER -> { RoomSummaryPlaceholderRow(modifier = modifier) } - DisplayType.INVITE -> { + RoomSummaryDisplayType.INVITE -> { RoomSummaryScaffoldRow( room = room, onClick = onClick, @@ -107,7 +107,7 @@ internal fun RoomSummaryRow( }) } } - DisplayType.ROOM -> { + RoomSummaryDisplayType.ROOM -> { RoomSummaryScaffoldRow( room = room, onClick = onClick, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt index a92c56e94f..af631c3181 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt @@ -18,7 +18,7 @@ package io.element.android.features.roomlist.impl.datasource import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary -import io.element.android.features.roomlist.impl.model.DisplayType +import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.dateformatter.api.LastMessageTimestampFormatter import io.element.android.libraries.designsystem.components.avatar.AvatarData @@ -38,7 +38,7 @@ class RoomListRoomSummaryFactory @Inject constructor( return RoomListRoomSummary( id = id, roomId = RoomId(id), - type = DisplayType.PLACEHOLDER, + displayType = RoomSummaryDisplayType.PLACEHOLDER, name = "Short name", timestamp = "hh:mm", lastMessage = "Last message for placeholder", @@ -95,10 +95,10 @@ class RoomListRoomSummaryFactory @Inject constructor( ) }, canonicalAlias = roomSummary.details.canonicalAlias, - type = if (roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED) { - DisplayType.INVITE + displayType = if (roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED) { + RoomSummaryDisplayType.INVITE } else { - DisplayType.ROOM + RoomSummaryDisplayType.ROOM } ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index 996fc18c66..c149bc8b2b 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationMode @Immutable data class RoomListRoomSummary( val id: String, - val type: DisplayType, + val displayType: RoomSummaryDisplayType, val roomId: RoomId, val name: String, val canonicalAlias: String?, @@ -45,11 +45,11 @@ data class RoomListRoomSummary( val isHighlighted = userDefinedNotificationMode != RoomNotificationMode.MUTE && (numberOfUnreadNotifications > 0 || numberOfUnreadMentions > 0) || isMarkedUnread || - type == DisplayType.INVITE + displayType == RoomSummaryDisplayType.INVITE val hasNewContent = numberOfUnreadMessages > 0 || numberOfUnreadMentions > 0 || numberOfUnreadNotifications > 0 || isMarkedUnread || - type == DisplayType.INVITE + displayType == RoomSummaryDisplayType.INVITE } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index d33803fd2b..68abb742dd 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -27,7 +27,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider get() = sequenceOf( listOf( - aRoomListRoomSummary(displayType = DisplayType.PLACEHOLDER), + aRoomListRoomSummary(displayType = RoomSummaryDisplayType.PLACEHOLDER), aRoomListRoomSummary(), aRoomListRoomSummary(lastMessage = null), aRoomListRoomSummary( @@ -83,7 +83,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider } + val acceptDeclinePresenter = Presenter { + anAcceptDeclineInviteState(eventSink = eventSinkRecorder) + } + val roomListService = FakeRoomListService() + val scope = CoroutineScope(coroutineContext + SupervisorJob()) + val matrixClient = FakeMatrixClient( + roomListService = roomListService, + ) + val roomSummary = aRoomSummaryFilled( + currentUserMembership = CurrentUserMembership.INVITED + ) + roomListService.postAllRoomsLoadingState(RoomList.LoadingState.Loaded(1)) + roomListService.postAllRooms(listOf(roomSummary)) + val presenter = createRoomListPresenter( + coroutineScope = scope, + client = matrixClient, + acceptDeclineInvitePresenter = acceptDeclinePresenter + ) + presenter.test { + val state = consumeItemsUntilPredicate { + it.contentState is RoomListContentState.Rooms + }.last() + + val roomListRoomSummary = state.contentAsRooms().summaries.first { + it.id == roomSummary.identifier() + } + state.eventSink(RoomListEvents.AcceptInvite(roomListRoomSummary)) + state.eventSink(RoomListEvents.DeclineInvite(roomListRoomSummary)) + + val inviteData = roomListRoomSummary.toInviteData() + + assert(eventSinkRecorder) + .isCalledExactly(2) + .withSequence( + listOf(value(AcceptDeclineInviteEvents.AcceptInvite(inviteData))), + listOf(value(AcceptDeclineInviteEvents.DeclineInvite(inviteData))), + ) + } + } + private fun TestScope.createRoomListPresenter( client: MatrixClient = FakeMatrixClient(), networkMonitor: NetworkMonitor = FakeNetworkMonitor(), snackbarDispatcher: SnackbarDispatcher = SnackbarDispatcher(), - inviteStateDataSource: InviteStateDataSource = FakeInviteDataSource(), leaveRoomPresenter: LeaveRoomPresenter = FakeLeaveRoomPresenter(), lastMessageTimestampFormatter: LastMessageTimestampFormatter = FakeLastMessageTimestampFormatter().apply { givenFormat(A_FORMATTED_DATE) @@ -625,11 +643,11 @@ class RoomListPresenterTests { analyticsService: AnalyticsService = FakeAnalyticsService(), filtersPresenter: Presenter = Presenter { aRoomListFiltersState() }, searchPresenter: Presenter = Presenter { aRoomListSearchState() }, + acceptDeclineInvitePresenter: Presenter = Presenter { anAcceptDeclineInviteState() }, ) = RoomListPresenter( client = client, networkMonitor = networkMonitor, snackbarDispatcher = snackbarDispatcher, - inviteStateDataSource = inviteStateDataSource, leaveRoomPresenter = leaveRoomPresenter, roomListDataSource = RoomListDataSource( roomListService = client.roomListService, @@ -651,5 +669,6 @@ class RoomListPresenterTests { sessionPreferencesStore = sessionPreferencesStore, filtersPresenter = filtersPresenter, analyticsService = analyticsService, + acceptDeclineInvitePresenter = acceptDeclineInvitePresenter, ) } diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListViewTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListViewTest.kt index 2dbec36395..c21a3a9410 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListViewTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListViewTest.kt @@ -26,6 +26,7 @@ import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTouchInput import androidx.test.ext.junit.runners.AndroidJUnit4 import io.element.android.features.roomlist.impl.components.RoomListMenuAction +import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.tests.testutils.EnsureNeverCalled @@ -93,7 +94,9 @@ class RoomListViewTest { val state = aRoomListState( eventSink = eventsRecorder, ) - val room0 = state.contentAsRooms().summaries.first() + val room0 = state.contentAsRooms().summaries.first{ + it.displayType == RoomSummaryDisplayType.ROOM + } ensureCalledOnceWithParam(room0.roomId) { callback -> rule.setRoomListView( state = state, @@ -109,7 +112,9 @@ class RoomListViewTest { val state = aRoomListState( eventSink = eventsRecorder, ) - val room0 = state.contentAsRooms().summaries.first() + val room0 = state.contentAsRooms().summaries.first{ + it.displayType == RoomSummaryDisplayType.ROOM + } rule.setRoomListView( state = state, ) @@ -136,19 +141,20 @@ class RoomListViewTest { } @Test - fun `clicking on invites invokes the expected callback`() { + fun `clicking on accept and decline invite emits the expected Events`() { val eventsRecorder = EventsRecorder() val state = aRoomListState( - contentState = aRoomsContentState(invitesState = InvitesState.NewInvites), eventSink = eventsRecorder, ) - ensureCalledOnce { callback -> - rule.setRoomListView( - state = state, - onInvitesClicked = callback, - ) - rule.clickOn(CommonStrings.action_invites_list) + val invitedRoom = state.contentAsRooms().summaries.first { + it.displayType == RoomSummaryDisplayType.INVITE } + rule.setRoomListView(state = state) + rule.clickOn(CommonStrings.action_accept) + rule.clickOn(CommonStrings.action_decline) + eventsRecorder.assertList( + listOf(RoomListEvents.AcceptInvite(invitedRoom),RoomListEvents.DeclineInvite(invitedRoom)), + ) } } @@ -158,7 +164,6 @@ private fun AndroidComposeTestRule.setRoomL onSettingsClicked: () -> Unit = EnsureNeverCalled(), onConfirmRecoveryKeyClicked: () -> Unit = EnsureNeverCalled(), onCreateRoomClicked: () -> Unit = EnsureNeverCalled(), - onInvitesClicked: () -> Unit = EnsureNeverCalled(), onRoomSettingsClicked: (RoomId) -> Unit = EnsureNeverCalledWithParam(), onMenuActionClicked: (RoomListMenuAction) -> Unit = EnsureNeverCalledWithParam(), onRoomDirectorySearchClicked: () -> Unit = EnsureNeverCalled(), @@ -170,10 +175,10 @@ private fun AndroidComposeTestRule.setRoomL onSettingsClicked = onSettingsClicked, onConfirmRecoveryKeyClicked = onConfirmRecoveryKeyClicked, onCreateRoomClicked = onCreateRoomClicked, - onInvitesClicked = onInvitesClicked, onRoomSettingsClicked = onRoomSettingsClicked, onMenuActionClicked = onMenuActionClicked, onRoomDirectorySearchClicked = onRoomDirectorySearchClicked, + acceptDeclineInviteView = { }, ) } } diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/datasource/DefaultInviteStateDataSourceTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/datasource/DefaultInviteStateDataSourceTest.kt deleted file mode 100644 index a1e08cd93b..0000000000 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/datasource/DefaultInviteStateDataSourceTest.kt +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.roomlist.impl.datasource - -import app.cash.molecule.RecompositionMode -import app.cash.molecule.moleculeFlow -import app.cash.turbine.test -import com.google.common.truth.Truth.assertThat -import io.element.android.features.invite.test.FakeSeenInvitesStore -import io.element.android.features.roomlist.impl.InvitesState -import io.element.android.libraries.matrix.test.A_ROOM_ID -import io.element.android.libraries.matrix.test.A_ROOM_ID_2 -import io.element.android.libraries.matrix.test.FakeMatrixClient -import io.element.android.libraries.matrix.test.room.aRoomSummaryFilled -import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService -import io.element.android.tests.testutils.testCoroutineDispatchers -import kotlinx.coroutines.test.runTest -import org.junit.Test - -internal class DefaultInviteStateDataSourceTest { - @Test - fun `emits NoInvites state if invites list is empty`() = runTest { - val roomListService = FakeRoomListService() - val client = FakeMatrixClient(roomListService = roomListService) - val seenStore = FakeSeenInvitesStore() - val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers()) - - moleculeFlow(RecompositionMode.Immediate) { - dataSource.inviteState() - }.test { - assertThat(awaitItem()).isEqualTo(InvitesState.NoInvites) - } - } - - @Test - fun `emits NewInvites state if unseen invite exists`() = runTest { - val roomListService = FakeRoomListService() - roomListService.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID))) - val client = FakeMatrixClient(roomListService = roomListService) - val seenStore = FakeSeenInvitesStore() - val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers()) - - moleculeFlow(RecompositionMode.Immediate) { - dataSource.inviteState() - }.test { - skipItems(2) - assertThat(awaitItem()).isEqualTo(InvitesState.NewInvites) - } - } - - @Test - fun `emits NewInvites state if multiple invites exist and at least one is unseen`() = runTest { - val roomListService = FakeRoomListService() - roomListService.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID), aRoomSummaryFilled(roomId = A_ROOM_ID_2))) - val client = FakeMatrixClient(roomListService = roomListService) - val seenStore = FakeSeenInvitesStore() - seenStore.publishRoomIds(setOf(A_ROOM_ID)) - val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers(useUnconfinedTestDispatcher = true)) - - moleculeFlow(RecompositionMode.Immediate) { - dataSource.inviteState() - }.test { - skipItems(1) - assertThat(awaitItem()).isEqualTo(InvitesState.NewInvites) - } - } - - @Test - fun `emits SeenInvites state if invite exists in seen store`() = runTest { - val roomListService = FakeRoomListService() - roomListService.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID))) - val client = FakeMatrixClient(roomListService = roomListService) - val seenStore = FakeSeenInvitesStore() - seenStore.publishRoomIds(setOf(A_ROOM_ID)) - val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers(useUnconfinedTestDispatcher = true)) - - moleculeFlow(RecompositionMode.Immediate) { - dataSource.inviteState() - }.test { - skipItems(1) - - assertThat(awaitItem()).isEqualTo(InvitesState.SeenInvites) - } - } - - @Test - fun `emits new state in response to upstream events`() = runTest { - val roomListService = FakeRoomListService() - val client = FakeMatrixClient(roomListService = roomListService) - val seenStore = FakeSeenInvitesStore() - val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers()) - - moleculeFlow(RecompositionMode.Immediate) { - dataSource.inviteState() - }.test { - // Initially there are no invites - assertThat(awaitItem()).isEqualTo(InvitesState.NoInvites) - - // When a single invite is received, state should be NewInvites - roomListService.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID))) - skipItems(1) - assertThat(awaitItem()).isEqualTo(InvitesState.NewInvites) - - // If that invite is marked as seen, then the state becomes SeenInvites - seenStore.publishRoomIds(setOf(A_ROOM_ID)) - skipItems(1) - assertThat(awaitItem()).isEqualTo(InvitesState.SeenInvites) - - // Another new invite resets it to NewInvites - roomListService.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID), aRoomSummaryFilled(roomId = A_ROOM_ID_2))) - skipItems(1) - assertThat(awaitItem()).isEqualTo(InvitesState.NewInvites) - - // All of the invites going away reverts to NoInvites - roomListService.postInviteRooms(emptyList()) - skipItems(1) - assertThat(awaitItem()).isEqualTo(InvitesState.NoInvites) - } - } -} diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/datasource/FakeInviteDataSource.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/datasource/FakeInviteDataSource.kt deleted file mode 100644 index 49f4a65f7f..0000000000 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/datasource/FakeInviteDataSource.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.roomlist.impl.datasource - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import io.element.android.features.roomlist.impl.InvitesState -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOf - -class FakeInviteDataSource( - private val flow: Flow = flowOf() -) : InviteStateDataSource { - @Composable - override fun inviteState(): InvitesState { - val state = flow.collectAsState(initial = InvitesState.NoInvites) - return state.value - } -} diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt index 756fe1aa0e..0a81f546c5 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt @@ -45,6 +45,7 @@ class RoomListFiltersPresenterTests { filterSelectionState(RoomListFilter.People, false), filterSelectionState(RoomListFilter.Rooms, false), filterSelectionState(RoomListFilter.Favourites, false), + filterSelectionState(RoomListFilter.Invites, false), ) } cancelAndIgnoreRemainingEvents() @@ -84,6 +85,7 @@ class RoomListFiltersPresenterTests { filterSelectionState(RoomListFilter.People, false), filterSelectionState(RoomListFilter.Rooms, false), filterSelectionState(RoomListFilter.Favourites, false), + filterSelectionState(RoomListFilter.Invites, false), ).inOrder() assertThat(state.selectedFilters()).isEmpty() val roomListCurrentFilter = roomListService.allRooms.currentFilter.value as MatrixRoomListFilter.All diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryTest.kt index 82816e674f..db0bdf9ded 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryTest.kt @@ -72,6 +72,15 @@ class RoomListRoomSummaryTest { assertThat(sut.isHighlighted).isTrue() assertThat(sut.hasNewContent).isTrue() } + + @Test + fun `when display type is invite then isHighlighted and hasNewContent are true`() { + val sut = createRoomListRoomSummary( + displayType = RoomSummaryDisplayType.INVITE, + ) + assertThat(sut.isHighlighted).isTrue() + assertThat(sut.hasNewContent).isTrue() + } } internal fun createRoomListRoomSummary( @@ -81,6 +90,7 @@ internal fun createRoomListRoomSummary( isMarkedUnread: Boolean = false, userDefinedNotificationMode: RoomNotificationMode? = null, isFavorite: Boolean = false, + displayType: RoomSummaryDisplayType = RoomSummaryDisplayType.ROOM, ) = RoomListRoomSummary( id = A_ROOM_ID.value, roomId = A_ROOM_ID, @@ -92,9 +102,11 @@ internal fun createRoomListRoomSummary( timestamp = A_FORMATTED_DATE, lastMessage = "", avatarData = AvatarData(id = A_ROOM_ID.value, name = A_ROOM_NAME, size = AvatarSize.RoomListItem), - isPlaceholder = false, + displayType = displayType, userDefinedNotificationMode = userDefinedNotificationMode, hasRoomCall = false, isDirect = false, isFavorite = isFavorite, + canonicalAlias = null, + inviteSender = null, ) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt index badb68e9e1..b9b078c5f3 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt @@ -41,6 +41,7 @@ fun aRoomSummaryFilled( numUnreadMentions: Int = 0, numUnreadMessages: Int = 0, notificationMode: RoomNotificationMode? = null, + currentUserMembership: CurrentUserMembership = CurrentUserMembership.JOINED, ) = RoomSummary.Filled( aRoomSummaryDetails( roomId = roomId, @@ -51,6 +52,7 @@ fun aRoomSummaryFilled( numUnreadMentions = numUnreadMentions, numUnreadMessages = numUnreadMessages, notificationMode = notificationMode, + currentUserMembership = currentUserMembership, ) ) diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/factories/FakeIntentProvider.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/factories/FakeIntentProvider.kt index 2de70bb672..ed64e98856 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/factories/FakeIntentProvider.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/factories/FakeIntentProvider.kt @@ -24,6 +24,4 @@ import io.element.android.libraries.push.impl.intent.IntentProvider class FakeIntentProvider : IntentProvider { override fun getViewRoomIntent(sessionId: SessionId, roomId: RoomId?, threadId: ThreadId?) = Intent() - - override fun getInviteListIntent(sessionId: SessionId) = Intent() } diff --git a/samples/minimal/build.gradle.kts b/samples/minimal/build.gradle.kts index 402d1a48b8..80f5f8726b 100644 --- a/samples/minimal/build.gradle.kts +++ b/samples/minimal/build.gradle.kts @@ -65,4 +65,5 @@ dependencies { implementation(projects.libraries.featureflag.impl) implementation(projects.services.analytics.noop) implementation(libs.coroutines.core) + implementation(projects.libraries.push.test) } diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt index a7916a13da..49fa29ced3 100644 --- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt +++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt @@ -20,6 +20,8 @@ import android.content.Context import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.ui.Modifier +import io.element.android.features.invite.impl.response.AcceptDeclineInvitePresenter +import io.element.android.features.invite.impl.response.AcceptDeclineInviteView import io.element.android.features.leaveroom.impl.LeaveRoomPresenterImpl import io.element.android.features.networkmonitor.impl.NetworkMonitorImpl import io.element.android.features.roomlist.impl.RoomListPresenter @@ -48,6 +50,7 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import io.element.android.libraries.preferences.impl.store.DefaultSessionPreferencesStore +import io.element.android.libraries.push.test.notifications.FakeNotificationDrawerManager import io.element.android.services.analytics.noop.NoopAnalyticsService import io.element.android.services.toolbox.impl.strings.AndroidStringProvider import kotlinx.coroutines.launch @@ -94,7 +97,6 @@ class RoomListScreen( client = matrixClient, networkMonitor = NetworkMonitorImpl(context, Singleton.appScope), snackbarDispatcher = SnackbarDispatcher(), - inviteStateDataSource = DefaultInviteStateDataSource(matrixClient, DefaultSeenInvitesStore(context), coroutineDispatchers), leaveRoomPresenter = LeaveRoomPresenterImpl(matrixClient, RoomMembershipObserver(), coroutineDispatchers), roomListDataSource = RoomListDataSource( roomListService = matrixClient.roomListService, @@ -130,6 +132,11 @@ class RoomListScreen( featureFlagService = featureFlagService, filterSelectionStrategy = DefaultFilterSelectionStrategy(), ), + acceptDeclineInvitePresenter = AcceptDeclineInvitePresenter( + client = matrixClient, + analyticsService = NoopAnalyticsService(), + notificationDrawerManager = FakeNotificationDrawerManager(), + ), analyticsService = NoopAnalyticsService(), ) @@ -152,11 +159,13 @@ class RoomListScreen( onSettingsClicked = {}, onConfirmRecoveryKeyClicked = {}, onCreateRoomClicked = {}, - onInvitesClicked = {}, onRoomSettingsClicked = {}, onMenuActionClicked = {}, onRoomDirectorySearchClicked = {}, modifier = modifier, + acceptDeclineInviteView = { + AcceptDeclineInviteView(state = state.acceptDeclineInviteState, onInviteAccepted = {}, onInviteDeclined = {}) + } ) DisposableEffect(Unit) { From e171472fc4b26d446d84f5c06bf1b0d5d0993c81 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 16 Apr 2024 15:49:07 +0200 Subject: [PATCH 009/289] Room list invites : clean and format --- .../io/element/android/x/intent/IntentProviderImpl.kt | 1 - .../kotlin/io/element/android/appnav/LoggedInFlowNode.kt | 4 ---- .../android/features/roomlist/impl/RoomListStateProvider.kt | 2 +- .../element/android/features/roomlist/impl/RoomListView.kt | 1 - .../features/roomlist/impl/components/RoomSummaryRow.kt | 5 +++-- .../android/features/roomlist/impl/model/InviteSender.kt | 1 - .../features/roomlist/impl/model/RoomListRoomSummary.kt | 1 - .../features/roomlist/impl/RoomListPresenterTests.kt | 2 -- .../android/features/roomlist/impl/RoomListViewTest.kt | 6 +++--- .../io/element/android/libraries/deeplink/DeeplinkData.kt | 1 - .../android/libraries/deeplink/DeepLinkCreatorTest.kt | 1 - .../android/libraries/push/impl/intent/IntentProvider.kt | 1 - .../impl/notifications/factories/PendingIntentFactory.kt | 1 - 13 files changed, 7 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/io/element/android/x/intent/IntentProviderImpl.kt b/app/src/main/kotlin/io/element/android/x/intent/IntentProviderImpl.kt index 0e8e9b5f29..bdadf1e3ef 100644 --- a/app/src/main/kotlin/io/element/android/x/intent/IntentProviderImpl.kt +++ b/app/src/main/kotlin/io/element/android/x/intent/IntentProviderImpl.kt @@ -45,5 +45,4 @@ class IntentProviderImpl @Inject constructor( data = deepLinkCreator.room(sessionId, roomId, threadId).toUri() } } - } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 46f84a73eb..1bde7c5b28 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -60,7 +60,6 @@ import io.element.android.features.securebackup.api.SecureBackupEntryPoint import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.deeplink.DeeplinkData import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.SessionScope @@ -68,7 +67,6 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.MAIN_SPACE import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.sync.SyncState -import io.element.android.libraries.push.api.notifications.NotificationDrawerManager import io.element.android.services.appnavstate.api.AppNavigationStateService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.FlowPreview @@ -77,7 +75,6 @@ import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import kotlinx.parcelize.Parcelize import timber.log.Timber import java.util.Optional @@ -94,7 +91,6 @@ class LoggedInFlowNode @AssistedInject constructor( private val ftueEntryPoint: FtueEntryPoint, private val coroutineScope: CoroutineScope, private val networkMonitor: NetworkMonitor, - private val notificationDrawerManager: NotificationDrawerManager, private val ftueService: FtueService, private val lockScreenEntryPoint: LockScreenEntryPoint, private val lockScreenStateService: LockScreenService, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index 3b53723565..bdc8938503 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -23,9 +23,9 @@ import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState import io.element.android.features.roomlist.impl.filters.RoomListFiltersState import io.element.android.features.roomlist.impl.filters.aRoomListFiltersState -import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary +import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.features.roomlist.impl.model.aRoomListRoomSummary import io.element.android.features.roomlist.impl.search.RoomListSearchState import io.element.android.features.roomlist.impl.search.aRoomListSearchState diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt index fe874a037b..22506fe49b 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt @@ -66,7 +66,6 @@ fun RoomListView( isOnline = state.hasNetworkConnection, ) { topPadding -> Box { - if (state.contextMenu is RoomListState.ContextMenu.Shown) { RoomListContextMenu( contextMenu = state.contextMenu, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 0d30d93f47..ce27d3b916 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -47,10 +47,10 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.roomlist.impl.RoomListEvents -import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryProvider +import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom import io.element.android.libraries.designsystem.components.avatar.Avatar @@ -104,7 +104,8 @@ internal fun RoomSummaryRow( }, onDeclineClicked = { eventSink(RoomListEvents.DeclineInvite(room)) - }) + } + ) } } RoomSummaryDisplayType.ROOM -> { diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt index 137ab4797a..64a47d5072 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt @@ -34,7 +34,6 @@ data class InviteSender( val displayName: String, val avatarData: AvatarData, ) { - @Composable fun annotatedString(): AnnotatedString { return stringResource(R.string.screen_invites_invited_you, displayName, userId.value).let { text -> diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index c149bc8b2b..607303f84c 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -40,7 +40,6 @@ data class RoomListRoomSummary( val isDirect: Boolean, val isFavorite: Boolean, val inviteSender: InviteSender?, - ) { val isHighlighted = userDefinedNotificationMode != RoomNotificationMode.MUTE && (numberOfUnreadNotifications > 0 || numberOfUnreadMentions > 0) || diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt index 2a6867b033..bc511d0270 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt @@ -87,12 +87,10 @@ import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test -import java.util.Optional class RoomListPresenterTests { @get:Rule diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListViewTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListViewTest.kt index c21a3a9410..7507ab466b 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListViewTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListViewTest.kt @@ -94,7 +94,7 @@ class RoomListViewTest { val state = aRoomListState( eventSink = eventsRecorder, ) - val room0 = state.contentAsRooms().summaries.first{ + val room0 = state.contentAsRooms().summaries.first { it.displayType == RoomSummaryDisplayType.ROOM } ensureCalledOnceWithParam(room0.roomId) { callback -> @@ -112,7 +112,7 @@ class RoomListViewTest { val state = aRoomListState( eventSink = eventsRecorder, ) - val room0 = state.contentAsRooms().summaries.first{ + val room0 = state.contentAsRooms().summaries.first { it.displayType == RoomSummaryDisplayType.ROOM } rule.setRoomListView( @@ -153,7 +153,7 @@ class RoomListViewTest { rule.clickOn(CommonStrings.action_accept) rule.clickOn(CommonStrings.action_decline) eventsRecorder.assertList( - listOf(RoomListEvents.AcceptInvite(invitedRoom),RoomListEvents.DeclineInvite(invitedRoom)), + listOf(RoomListEvents.AcceptInvite(invitedRoom), RoomListEvents.DeclineInvite(invitedRoom)), ) } } diff --git a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkData.kt b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkData.kt index 85fa57d413..4f12cd4e3e 100644 --- a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkData.kt +++ b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkData.kt @@ -29,5 +29,4 @@ sealed interface DeeplinkData { /** The target is a room, with the given [sessionId], [roomId] and optionally a [threadId]. */ data class Room(override val sessionId: SessionId, val roomId: RoomId, val threadId: ThreadId?) : DeeplinkData - } diff --git a/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeepLinkCreatorTest.kt b/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeepLinkCreatorTest.kt index 664b61cbdc..1c603713ab 100644 --- a/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeepLinkCreatorTest.kt +++ b/libraries/deeplink/src/test/kotlin/io/element/android/libraries/deeplink/DeepLinkCreatorTest.kt @@ -33,5 +33,4 @@ class DeepLinkCreatorTest { assertThat(sut.room(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID)) .isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId") } - } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/intent/IntentProvider.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/intent/IntentProvider.kt index 22d745d92a..e23adbd26a 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/intent/IntentProvider.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/intent/IntentProvider.kt @@ -30,5 +30,4 @@ interface IntentProvider { roomId: RoomId?, threadId: ThreadId?, ): Intent - } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt index f51eea74dd..e564cf622e 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt @@ -19,7 +19,6 @@ package io.element.android.libraries.push.impl.notifications.factories import android.app.PendingIntent import android.content.Context import android.content.Intent -import androidx.core.app.PendingIntentCompat import io.element.android.libraries.androidutils.uri.createIgnoredUri import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.matrix.api.core.EventId From 253d8aaa519993e310b9ba1b8a0341fc4e703572 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Tue, 16 Apr 2024 14:03:35 +0000 Subject: [PATCH 010/289] Update screenshots --- ...ow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,en].png | 3 --- ...ow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,en].png | 3 --- ...ow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,en].png | 3 --- ...ow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,en].png | 3 --- ...ow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,en].png | 3 --- ..._null_InviteSummaryRow-Night-0_2_null_0,NEXUS_5,1.0,en].png | 3 --- ..._null_InviteSummaryRow-Night-0_2_null_1,NEXUS_5,1.0,en].png | 3 --- ..._null_InviteSummaryRow-Night-0_2_null_2,NEXUS_5,1.0,en].png | 3 --- ..._null_InviteSummaryRow-Night-0_2_null_3,NEXUS_5,1.0,en].png | 3 --- ..._null_InviteSummaryRow-Night-0_2_null_4,NEXUS_5,1.0,en].png | 3 --- ...View_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,en].png | 3 --- ...View_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,en].png | 3 --- ...View_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,en].png | 3 --- ...View_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,en].png | 3 --- ...View_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,en].png | 3 --- ...View_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,en].png | 3 --- ...View_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,en].png | 3 --- ...ew_null_InviteListView-Night-1_3_null_0,NEXUS_5,1.0,en].png | 3 --- ...ew_null_InviteListView-Night-1_3_null_1,NEXUS_5,1.0,en].png | 3 --- ...ew_null_InviteListView-Night-1_3_null_2,NEXUS_5,1.0,en].png | 3 --- ...ew_null_InviteListView-Night-1_3_null_3,NEXUS_5,1.0,en].png | 3 --- ...ew_null_InviteListView-Night-1_3_null_4,NEXUS_5,1.0,en].png | 3 --- ...ew_null_InviteListView-Night-1_3_null_5,NEXUS_5,1.0,en].png | 3 --- ...ew_null_InviteListView-Night-1_3_null_6,NEXUS_5,1.0,en].png | 3 --- ..._ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en].png} | 0 ...onfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en].png} | 0 ...omListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en].png} | 0 ...ListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en].png} | 0 ...ull_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en].png} | 0 ...l_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en].png} | 0 ...null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png | 3 +++ ...ull_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en].png} | 0 ...ull_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en].png} | 0 ...ull_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en].png} | 0 ...ull_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en].png} | 0 ...null_RoomListContentView-Day-5_6_null_0,NEXUS_5,1.0,en].png | 3 --- ...ll_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png | 3 +++ ...l_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en].png} | 0 ...l_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en].png} | 0 ...l_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en].png} | 0 ...l_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListContentView-Night-5_7_null_0,NEXUS_5,1.0,en].png | 3 --- ...RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en].png} | 0 ...omSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en].png} | 0 ...Row_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en].png} | 0 ...yRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en].png | 3 +++ ...yRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en].png | 3 +++ ...yRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en].png | 3 +++ ...yRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en].png | 3 +++ ...yRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en].png | 3 +++ ...yRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en].png | 3 +++ ...yRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en].png | 3 +++ ...yRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en].png | 3 +++ ...yRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en].png | 3 +++ ...Row_null_RoomSummaryRow-Day-9_10_null_1,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_10,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_11,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_12,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_13,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_14,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_15,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_16,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_17,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_18,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_19,NEXUS_5,1.0,en].png | 3 --- ...Row_null_RoomSummaryRow-Day-9_10_null_2,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_20,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_21,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_22,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_23,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_24,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_25,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_26,NEXUS_5,1.0,en].png | 3 --- ...ow_null_RoomSummaryRow-Day-9_10_null_27,NEXUS_5,1.0,en].png | 3 --- ...Row_null_RoomSummaryRow-Day-9_10_null_3,NEXUS_5,1.0,en].png | 3 --- ...Row_null_RoomSummaryRow-Day-9_10_null_4,NEXUS_5,1.0,en].png | 3 --- ...Row_null_RoomSummaryRow-Day-9_10_null_5,NEXUS_5,1.0,en].png | 3 --- ...Row_null_RoomSummaryRow-Day-9_10_null_6,NEXUS_5,1.0,en].png | 3 --- ...Row_null_RoomSummaryRow-Day-9_10_null_7,NEXUS_5,1.0,en].png | 3 --- ...Row_null_RoomSummaryRow-Day-9_10_null_8,NEXUS_5,1.0,en].png | 3 --- ...Row_null_RoomSummaryRow-Day-9_10_null_9,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Night-9_11_null_1,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_10,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_11,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_12,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_13,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_14,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_15,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_16,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_17,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_18,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_19,NEXUS_5,1.0,en].png | 3 --- ...w_null_RoomSummaryRow-Night-9_11_null_2,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_20,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_21,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_22,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_23,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_24,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_25,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_26,NEXUS_5,1.0,en].png | 3 --- ..._null_RoomSummaryRow-Night-9_11_null_27,NEXUS_5,1.0,en].png | 3 --- ...w_null_RoomSummaryRow-Night-9_11_null_3,NEXUS_5,1.0,en].png | 3 --- ...w_null_RoomSummaryRow-Night-9_11_null_4,NEXUS_5,1.0,en].png | 3 --- ...w_null_RoomSummaryRow-Night-9_11_null_5,NEXUS_5,1.0,en].png | 3 --- ...w_null_RoomSummaryRow-Night-9_11_null_6,NEXUS_5,1.0,en].png | 3 --- ...w_null_RoomSummaryRow-Night-9_11_null_7,NEXUS_5,1.0,en].png | 3 --- ...w_null_RoomSummaryRow-Night-9_11_null_8,NEXUS_5,1.0,en].png | 3 --- ...w_null_RoomSummaryRow-Night-9_11_null_9,NEXUS_5,1.0,en].png | 3 --- ...ll_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en].png} | 0 ..._RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en].png} | 0 ..._RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en].png} | 0 ...View_null_MigrationView-Day-10_11_null,NEXUS_5,1.0,en].png} | 0 ...ew_null_MigrationView-Night-10_12_null,NEXUS_5,1.0,en].png} | 0 ...stSearchResultContent-Day-11_12_null_0,NEXUS_5,1.0,en].png} | 0 ...stSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png} | 0 ...istSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png | 3 +++ ...istSearchResultContent-Day-12_13_null_2,NEXUS_5,1.0,en].png | 3 --- ...SearchResultContent-Night-11_13_null_0,NEXUS_5,1.0,en].png} | 0 ...SearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png} | 0 ...tSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png | 3 +++ ...tSearchResultContent-Night-12_14_null_2,NEXUS_5,1.0,en].png | 3 --- ...ll_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 3 --- ...ll_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 3 --- ..._InvitesEntryPointView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 3 --- ..._InvitesEntryPointView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 3 --- ...alBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en].png} | 0 ...BottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en].png} | 0 ...stModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en].png} | 0 ...ModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en].png} | 0 ...stView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png | 3 +++ ...stView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png | 3 +++ ...tView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png | 3 +++ ...stView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png | 3 +++ ...tView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en].png} | 0 ...tView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en].png} | 0 ...stView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png | 3 +++ ...tView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en].png} | 0 ...tView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en].png} | 0 ...tView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en].png} | 0 ...tView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en].png} | 0 ...stView_null_RoomListView-Day-3_4_null_0,NEXUS_5,1.0,en].png | 3 --- ...stView_null_RoomListView-Day-3_4_null_1,NEXUS_5,1.0,en].png | 3 --- ...tView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,en].png | 3 --- ...stView_null_RoomListView-Day-3_4_null_2,NEXUS_5,1.0,en].png | 3 --- ...stView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,en].png | 3 --- ...stView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,en].png | 3 --- ...stView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,en].png | 3 --- ...View_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png | 3 +++ ...View_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png | 3 +++ ...View_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en].png} | 0 ...iew_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en].png} | 0 ...iew_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en].png} | 0 ...iew_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en].png} | 0 ...iew_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Night-3_5_null_0,NEXUS_5,1.0,en].png | 3 --- ...View_null_RoomListView-Night-3_5_null_1,NEXUS_5,1.0,en].png | 3 --- ...iew_null_RoomListView-Night-3_5_null_12,NEXUS_5,1.0,en].png | 3 --- ...View_null_RoomListView-Night-3_5_null_2,NEXUS_5,1.0,en].png | 3 --- ...View_null_RoomListView-Night-3_5_null_3,NEXUS_5,1.0,en].png | 3 --- ...View_null_RoomListView-Night-3_5_null_4,NEXUS_5,1.0,en].png | 3 --- ...View_null_RoomListView-Night-3_5_null_7,NEXUS_5,1.0,en].png | 3 --- 216 files changed, 216 insertions(+), 300 deletions(-) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_5,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_6,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-4_5_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-4_6_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-7_8_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-7_9_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-6_7_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-6_8_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en].png} (100%) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en].png} (100%) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_0,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-8_9_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-8_10_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_10,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_11,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_12,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_13,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_14,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_15,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_16,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_17,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_18,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_19,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_20,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_21,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_22,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_23,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_24,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_25,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_26,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_27,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_5,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_6,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_7,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_8,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_9,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_10,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_11,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_12,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_13,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_14,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_15,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_16,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_17,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_18,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_19,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_20,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_21,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_22,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_23,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_24,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_25,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_26,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_27,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_5,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_6,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_7,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_8,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_9,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-10_12_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-10_12_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-11_12_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-10_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-11_13_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-10_12_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_2,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_1,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-2_3_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-2_4_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-1_2_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-1_3_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en].png} (100%) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en].png} (100%) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_12,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 9af73d58bd..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:730f27b45cb2176ac6f8415780b74e2f117b9cc3f64d4602e6c42253f65b23e7 -size 29181 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index 84b761658b..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5bcafa377dfdd0a3e3db955c2d81791f1c36c95b22d978090b8d4e6b063c7d69 -size 34866 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index 149ea8dca8..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b77b77a20d1c3d936dea733542f1b2bd8e575ccb6d3021ce1c2d84a701bea35 -size 34965 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index e9a0097fe1..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d3092c176ec732f3e378430779a8645c02cd6c47756a6dafaf09a7fe28e79608 -size 14112 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 18eb4c8c8a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8b3cf23c4ef3ee18a3dd4a20a683266b2cdc6b6bca90b1006c109e23c82c6ebb -size 29445 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 40b58766cf..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:182d46896d7f5cd32b3234cf1201934b184cb80288cf3561f5f84c2dc69726db -size 27951 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index 201dd8ceaa..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f55a0e24a5b0e1a15f017d9989409ca7e4dc636f2bf306c3accdca7efdc9fcc5 -size 32451 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index 92c872a5ff..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ef4d52dab3875b49c2160c91e0eae5c492cfde4dfb66b95a003e833e15373e4a -size 32555 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index 3a32d5a649..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a5c44be48cb324b9924284c56c5e78c2e118d5939a4a72fe9b6e161350beef96 -size 13179 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 94425c7269..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:68fef9689570c6353ae8620c98e9f081de6dd0ccb34529a9580cac67e08d676f -size 28109 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index f9e386b0a2..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aa90fb393dcb986721190468a83b7b9956e97e2a89d809913ea8895b0f698eba -size 54691 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index ea22cd6376..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9e362f7b4f1b4dfe169a0adda60075ec1533fcdf0613b07267e8316746c802d2 -size 9013 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index f9e386b0a2..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aa90fb393dcb986721190468a83b7b9956e97e2a89d809913ea8895b0f698eba -size 54691 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index 00ef7fdd79..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:25e6524ca89091a336fb85ba1943dea5c75aed47c991f5e88e610f7248a37d00 -size 53926 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 7885f98840..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cb75ce275178fd84581680df4ba8cfe0cc4a5db079160a0a1c22e717521efb56 -size 54607 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,en].png deleted file mode 100644 index 8454a07904..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3dfe58becc60142b7547331dc4c263e761930dcf0dbb11d4e1efcbfaf618cb31 -size 42625 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,en].png deleted file mode 100644 index 8454a07904..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3dfe58becc60142b7547331dc4c263e761930dcf0dbb11d4e1efcbfaf618cb31 -size 42625 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index bc150d35ac..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cb2e96e4737a2616676439c4d6ce85279c7ea9f09129058818502658841e8f10 -size 51858 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index f3591ba89a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:434cec9370a229fd8f2a2f5ee7b7c0128f15a2fe1c011ef0c1689845d0536aaa -size 8753 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index bc150d35ac..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cb2e96e4737a2616676439c4d6ce85279c7ea9f09129058818502658841e8f10 -size 51858 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index 2390e55bcb..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:589b25bccb76c33aa5d8dbd83abfc96040825b2d7ab6ae8f6b2e8de97b181172 -size 48907 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 958a3d1254..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c5fd489d8088e8afd11738f52417cff00ff720ea493ac9b8d350b10c1b1effd0 -size 49458 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_5,NEXUS_5,1.0,en].png deleted file mode 100644 index a70274e954..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_5,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:76f3386f41e0b2daad020c08e577e9f7266c8f80e2cb020c6f6d4f51126d182b -size 37982 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_6,NEXUS_5,1.0,en].png deleted file mode 100644 index a70274e954..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_6,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:76f3386f41e0b2daad020c08e577e9f7266c8f80e2cb020c6f6d4f51126d182b -size 37982 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-4_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-4_5_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-4_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-4_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-7_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-7_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-7_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-7_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-6_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-6_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-6_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-6_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..0d42f642af --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4efec5e5b41fe5b51aaf55bd6d1b4466cef98bea89b2bd1cdc385ef02bc38903 +size 44382 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 67eee6dc7a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9097d88f12cd44680cdcef752d45b12884217c65bac846d3007f16393b3d7233 -size 28036 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..97e8cc0dcf --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12f219b2949bdb38cb02cec442796022b92adeaa39ccde06e40ea7ce91192545 +size 43679 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 752c60afa4..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f4e503d1c883b1b1b5a98f979afc04a2bc65aa23ba674ca3b96bcab3d7888773 -size 27993 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-8_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-8_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-8_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-8_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c93ff529a6 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5eaaa5766418d9d0b37e24c3c8ccdd1eb79652b936f13d58b90e8cdd75a71f8 +size 13005 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5a10bc3885 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f0f21443991249dd4b53ee2ac6b43c353c1ea55b23a3ff53ad1e359d2fc5d0c +size 19247 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..eb4afec48e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa3295a2f8bbe4781cf2b55a16c8f9b897e9cd54715d5af2ab7aec22c200bb20 +size 17511 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..faaf087596 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:187475e555201bd06ef9e9de9f4c3f2e9a442b09675729effa110e5d2dd5de88 +size 11949 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..a5fc9c89d9 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:606bc815600fc6a65b11515722d820c92be546ac50a641c03d670c6ce64346c8 +size 13057 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d3cb418900 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f02843d3ae3f36b984f5add2ec048c71063bc2fe480c96c8ce7e5c2dd3eb3919 +size 14415 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..2931c42d73 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:768b2e225ea9a4d873b350ef7e80dffff7c43b8a6ed4ab0f3cc53effe356e54b +size 12653 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..07b58f9ff4 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:092bd66b7993d466b12409c163a8e1db8ea82d0a38e72d58dea66b9a0c50bec3 +size 14408 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..761e29eba1 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93fa8534a3e88890a2e50960322a6e32fcba09574d04c1e264da006d3374138d +size 15546 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5fbe81c1b3 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2e4d4413ee17264ee5ab98b3aabea4a85ac43a3fc7106cd3bd56704add0ace8 +size 18010 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4da5dffdeb --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4aa801d4a33fea6b3a3d827c13227494684837ab3c39609f0f2865bab40023ab +size 16065 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..085be8c71e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:893245f4e9b53dde66e80da4a8fbe16cfbbde1917e80ae62d5860fb6295875a1 +size 8957 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f650b0a7e1 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42172f59cff93942c727c0edc32e5fb5d4e78ff31f9f0bfcdc30cfd9e7b0a2f6 +size 16649 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..08fa9b4a93 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4beffb494c4a1c151992f570c653d4f3bcdc676dd3bd812c1a9c193b6094d039 +size 17793 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..3aebff6d35 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70ffbe2ab13537550f471fedbb2a9f932eeb25524d7abbd42eff5494a735df16 +size 20196 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ab34abe165 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a922178af6b0ba7471c7b1480d974c6aad1a95d7435b775a74eafd8b96b9f2a4 +size 18316 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4d92370e04 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0625b6ca646f8a5aaed86f3af9b5ec8ebfe22fcccab538c4ec8727d987c4695 +size 12779 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..6b18cfd287 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8ebbac9b19dcd0cfdb4a8415cb2fc127b2f3b8ee2dbb24e00ed536fb12cec89 +size 13863 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..20a79de79e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8476ed4fb1f03e46294b14bdea071d1f18269538cd8865439bc40778035fc490 +size 15374 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..56ae1d4a9d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db98276227d22133adab021f97c5e306bc1b72dab1fe5153687aa9fec7e9b430 +size 13440 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..03d7ad2621 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1edf88cfd802b426e03c600b225fc0a6c97605809ee75da9c8f742dc62ece36d +size 24554 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..316526573c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f23ce2a8f4c1b82bde16bfe58b8ded5ecb21d37d1ee75116716ba26c5544732 +size 17484 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..29a8a5ffc4 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe7c09733d5ea15736ecc413e715ae2e3dd7c31bff17f26c4b00adb09402ed05 +size 22340 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f5baa1c1c6 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87d1765769e288454cbf502e66c515ba8c3fcdeccafebc517a408a24ca10b46f +size 13585 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..eccd779513 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ab81b10d565437e4e925594a382e04adb2fb1643b5c5852aa95c68e545d0359 +size 14716 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..924b43f14b --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c20cbd7a5f87e3a3d231c0e7c25fd9a070bc64458fa03f7b168fa2eef17f77d2 +size 17016 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c190460608 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c541251e84c100c45765d8d73c37eb5244f391cf94e0df87c5058c558e25adb +size 15253 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d8ed43fd42 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b01f879383d85af69a44bc3de56b9babd5d59cd0374990e5c77c05749a94bc +size 15812 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..710252cb45 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd9db7f7e9cb108cad43754c196ab0af88fb61b812863f696c75c9bdb766e108 +size 16963 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index ded89c6b2a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:57e0c90fa627974aba0d62363906bcc7911a6ada7d9d7db00db0df1d51fed54c -size 12911 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_10,NEXUS_5,1.0,en].png deleted file mode 100644 index 1bafbbad61..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_10,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5b73d387de39b44c4c527304ca0335a643db5026f84df2c4d9871f393696a9e9 -size 19174 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_11,NEXUS_5,1.0,en].png deleted file mode 100644 index 18fc91b246..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_11,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9fba453aea8def03bf7c03a7b1af8773a90d793b244ffd325021222868b13e1f -size 17437 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_12,NEXUS_5,1.0,en].png deleted file mode 100644 index bd1e1cf081..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_12,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5446a892002a8ef638e43cd659b641bc813f18f679e011ea992bf68759b91bf6 -size 11885 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_13,NEXUS_5,1.0,en].png deleted file mode 100644 index 57772ae4c0..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_13,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5ea52e2243ea11d9069750911d0ad35baad5527bf53dc4cce02920031490a1de -size 12986 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_14,NEXUS_5,1.0,en].png deleted file mode 100644 index 7dd7e3557a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_14,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:92a63305823639d3af10acdf57dbff31c642d7427630a8f911bbabc6fee599b5 -size 14337 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_15,NEXUS_5,1.0,en].png deleted file mode 100644 index 03e20fc5e7..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_15,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7b99d5c400c46d2bd8a4c546824c6269cea250ef7fc06de3d19eeb1781611418 -size 12585 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_16,NEXUS_5,1.0,en].png deleted file mode 100644 index ccf5266b0d..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_16,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f1011f9e1450cebf9bca3a52d903f28202f221c1351004bbee2c861272734c9e -size 14336 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_17,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_17,NEXUS_5,1.0,en].png deleted file mode 100644 index 777487dee7..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_17,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:28d1254f9a1c0381e6501fd414ccc67044e687dc36ac166ff8091ad639101849 -size 15476 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_18,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_18,NEXUS_5,1.0,en].png deleted file mode 100644 index 12858b093f..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_18,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:feced08d2fbbdb21530f62f2bdcb710f15bf5547cc0726ee95d9bbeb4a1b232a -size 17940 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_19,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_19,NEXUS_5,1.0,en].png deleted file mode 100644 index 206ac2598c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_19,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d028fa3716d7a464aa1526d944f363cf2307acf9472bebac4bb2bbb5ab4f741d -size 16006 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index 94306b9d92..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fcf2f25bbcb2f43d70a8a3228ba97426dbb98b533b74dd13ef6459f96a711db5 -size 8877 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_20,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_20,NEXUS_5,1.0,en].png deleted file mode 100644 index b756e33ca4..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_20,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6db420c8ee5a84cba37675332c4f3ad44e68e5fbd7744afa4e3ff89ed565d85e -size 16569 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_21,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_21,NEXUS_5,1.0,en].png deleted file mode 100644 index 15f5115092..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_21,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c1a050d4363b9f244dfc2bc0082d85554d7641f22cd84ce22ecd60b9f400dc1 -size 17707 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_22,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_22,NEXUS_5,1.0,en].png deleted file mode 100644 index 3d8cbc5200..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_22,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b54cb6eebb27e148310b2a493743b4512456c4cd2204659702c3166095a1501 -size 20124 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_23,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_23,NEXUS_5,1.0,en].png deleted file mode 100644 index 80b9026bb9..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_23,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:91f37898d0349cc080b252dc5ae2af89c5440755c79fb43ee08c8fbed4026e91 -size 18252 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_24,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_24,NEXUS_5,1.0,en].png deleted file mode 100644 index 7142e0c2dc..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_24,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7cbbe36af4861a20c68a2ce6faa6c34f4b4e1ab43f87d37a05127991694c65cd -size 12708 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_25,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_25,NEXUS_5,1.0,en].png deleted file mode 100644 index 2f9c19d207..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_25,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1cbf781127ecfa3aaeeb61c335f31486e4444533230f7be2708def5a97951be3 -size 13782 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_26,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_26,NEXUS_5,1.0,en].png deleted file mode 100644 index 4e3b85e61c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_26,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00642534849ea264da55d4e07045d2bfa64ea8ed26b22eb8c1b83168cad50ca4 -size 15298 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_27,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_27,NEXUS_5,1.0,en].png deleted file mode 100644 index c9e15e9d15..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_27,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3df9f800609ec668ae7221bad62e4dda8c3ac49347ef5f99a2bef14409daaafa -size 13372 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index feeeb4879c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eeddf38808c98548f550956dd9338a897f51913944bd1e9adac06117bbd002d9 -size 22262 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 1dd2438d7f..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d5e32fab6c9f6500bf523a18d10464a7b703649c80e6f1c56bc124cadbd2d248 -size 13512 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_5,NEXUS_5,1.0,en].png deleted file mode 100644 index e630578fca..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_5,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f6bbad58b0e446703ab76117af2916fbee40196faf8424e36eceac10f625d50c -size 14642 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_6,NEXUS_5,1.0,en].png deleted file mode 100644 index ccbb3701fb..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_6,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2af92e8473c7f2c5bbf429bee1c9da9fc68913cad8c7f41d2f4134e58cee41e4 -size 16954 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_7,NEXUS_5,1.0,en].png deleted file mode 100644 index b796a816e7..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_7,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c15c6ff846aec637346467a175709ef420c6a81160ecac3fa03186d472bc688e -size 15187 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_8,NEXUS_5,1.0,en].png deleted file mode 100644 index c680a1430a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_8,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eaa409bac7f41b101207542e7be42b3caacd3039f6918dd1bb1df3105dffa1e0 -size 15747 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_9,NEXUS_5,1.0,en].png deleted file mode 100644 index ce0baeb017..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_9,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:efa3edb3d8f7f071e4b622c4d5dda9ec86741b468c734caffd1b6463294038bb -size 16882 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..321223b8fb --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0dad8023da070c788c8dcbade31604af922f9d5d70a0d66675bb66291b7f47c +size 12959 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..8f2af1e218 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8911a072abe41a37695bd72d9a1505cc936c199b2d60c46fdbaaeccbe564979 +size 18497 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..8d43c9228b --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:333c51c90adeae3c237bcbbd3d922f17b912738b7a93667793757e8c5ed01cd8 +size 16803 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..dfd3312efe --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15edc4ad4addc39b9afcd5d45607d27b71cae663bc8c217c8b8dc7517aae3cd8 +size 11969 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f0e0e8873b --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df0d14a26eb94d16841dee7e0d6050270930bb5cd671ab726a1f85c3ac54b3db +size 13067 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..6fac0e02ac --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c27ec62177017a79b27ad4c930e78349d530a780c65df161ee5be7a9f71d9b34 +size 14362 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..23d3112923 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26ce4540addb4996190ef4a35fe6b3664c5d55b84b831be9c9212f4f603390e8 +size 12638 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..662e830870 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6103238af9ce6c17ab6618b40d8d58c7cb8358d2894e12d94fd2626b17af63cb +size 14197 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f4547eac97 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c8ab700e8b5f76a76558ccf0b75e2f42de0e53061b711651ccdfc757563e675 +size 15279 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..680630a600 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6ddf02105c4e2f2f654243a9c8333035f64b934b23f4195f631f08d493aa8fd +size 17410 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..dcf298950e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a7efffed0c800d02e6291bbd775a8b5697c8232e939ce6e383a1c9a3087537b +size 15557 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5b8e7301ac --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d062ac7f5db708643ccd60dbb51f5e2823b1f924942d0226537f3e5efba326ee +size 8980 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..de430d3f70 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b73b336f88d992f3e6b3419dff81c51b7cd34bb60f4466e5f715462205921fe +size 16236 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..a74e902cf1 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2ae3c844e45c3b555af6aac2c7cf6daec0f1981c51871928b9029b643b42862 +size 17299 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c8770761eb --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a30eaa7079aac625a70710a11a503dfb626143be36639f875dcdcf9010f3a6b9 +size 19442 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..67c14ae263 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04b2ccd325790f14631777c49494e702b8f7f8b397d4d878b52b04c3a2f0adc4 +size 17597 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e60b8872a0 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf040c71bca357b4cbc0b8c4ec6f902b79b12c271130d1bd14e32b8ee350fd61 +size 12780 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e90aa301f7 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b70d10f5fea72ee21b8bccd55bbf90b41c6038816221922a8a66dda78009d34d +size 13847 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c65bf53dc8 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16e3bcefc7d41eb46947fba8b537806c81efe549f450aebfaf006155f58611b4 +size 15279 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ee66b208d6 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:714113c39f128670df1c30f7bc6a13b619caec9e890438aff61f3bb29480e62f +size 13435 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..783bc66497 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17595de1e00e0677ba42985f0ad0f68f2799c63323bbe97c7bc16b7a8ace17ed +size 23891 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..48a2f2f940 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da459041411e30b7ce922ebeddbc6fa34534a01fc411aaeb9ec1c680747cdf26 +size 16808 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..24873e7f47 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1069c44d07da4a2ede607fc0742b64bffed5ae299ce3baaf25126da6b4de4671 +size 21706 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e828bb04ea --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2eb71253b0d195232b0a479418b491a5db985687b0a64c6244b5258a97918f0e +size 13348 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..490e8d1451 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:059e02fbb9c21d7547ca8f5a9e5a704d9ec95bf6c95d5c6719148e343888289a +size 14456 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..27c6d4a7f3 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbd68cac0d0cdb1c97c1614c1c93bd2ae6a1fdf804433c960deb869a52ac5fe2 +size 16470 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f0f147fee2 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b78bc00d6e15b89661fe4764cce3f8dda33bbace57139bc44fd468d03158a2eb +size 14757 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ce50fc29f9 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bd748cab7b6438dfbad74d88f166910d13385520c537ee963d48020922abe53 +size 15403 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..3faac5ea54 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea07b4297e09a621541dbc720b37d0838a9e59bac70ea9c621191bdc8f092d42 +size 16490 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index d83d063b86..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1d914ad609cda9e94ba793027c17f3b7289fec71e65e1880b837615203f7718e -size 12907 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_10,NEXUS_5,1.0,en].png deleted file mode 100644 index fbad73b77d..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_10,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:17e3fcb267a8abd2fa74471f594b493d46e0e77e0216abaa62c630ff57dd938d -size 18410 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_11,NEXUS_5,1.0,en].png deleted file mode 100644 index 575a498b06..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_11,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a500cf6cebabcf61ce3e595fee0d725c2190e89ec2ceeb76037bf0d2c96a9a08 -size 16719 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_12,NEXUS_5,1.0,en].png deleted file mode 100644 index 88122e735b..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_12,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:54c29d140b2c372df574c4286731499dc53b210320281d9eeac6c7f0c99c2206 -size 11890 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_13,NEXUS_5,1.0,en].png deleted file mode 100644 index 2089dd0140..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_13,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cd0fce8e0f2792c57d9dc1105c35c0cddcb167f2d42e3ee55d35dcc2e5c642d7 -size 12983 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_14,NEXUS_5,1.0,en].png deleted file mode 100644 index c9bf32e83f..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_14,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:41feffb8a8d0eac82993776b8847254716e81c92a242fb644a400925c29805ec -size 14280 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_15,NEXUS_5,1.0,en].png deleted file mode 100644 index b326c6aa5c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_15,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0c75c65af48d446fae85fc544f711da7928ff4a4f375da1a6b63675206efdd1c -size 12556 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_16,NEXUS_5,1.0,en].png deleted file mode 100644 index e5c5a6997b..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_16,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:18690f23f867c5650009aa08a505b33fe7745ca72c2f6c67509efd8f33186a2d -size 14149 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_17,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_17,NEXUS_5,1.0,en].png deleted file mode 100644 index 017752b8a3..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_17,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:96c52341dcc39ff08478e9fc88368981ef2247c742c1e85b7c6bd1d452b9ef8c -size 15229 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_18,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_18,NEXUS_5,1.0,en].png deleted file mode 100644 index cf02ee2f66..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_18,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a7bd100b21e361e0d484bb1c91118a27bfc39f2d38509e411c7e5ae77c5c99da -size 17364 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_19,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_19,NEXUS_5,1.0,en].png deleted file mode 100644 index 23291f3b7d..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_19,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1c112bec64ec069fbf8c363413399846432560921c64ee165a49cd78bcdd37ee -size 15509 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index d93b2c752f..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e05f294579b4420e6671f268d10fae8fb49e93e5ae5b0f0d4548f7cdfeb82742 -size 8928 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_20,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_20,NEXUS_5,1.0,en].png deleted file mode 100644 index a8a0fadda6..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_20,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:422630b6ed43cdedee28fc99db0c8fe60cfa462c88c6b3d50a45194b3f7f2852 -size 16153 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_21,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_21,NEXUS_5,1.0,en].png deleted file mode 100644 index 6da0ee1512..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_21,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e0ba4fdd95235ff3c3ac06a9c7980bc2a0d438aaceb2ba6f1769c7e53ffb2100 -size 17219 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_22,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_22,NEXUS_5,1.0,en].png deleted file mode 100644 index 7854ddbf86..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_22,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8b5efd707efd57002e8209b13f3c3534c180590c52bd6f6bd4c200e08d42d3f -size 19362 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_23,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_23,NEXUS_5,1.0,en].png deleted file mode 100644 index f246707379..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_23,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1f802c1c6ddc59bc3bd966244833bb94b81a178ec51d1a08b01b0b01156cd2fe -size 17511 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_24,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_24,NEXUS_5,1.0,en].png deleted file mode 100644 index a4736a0597..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_24,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:469fe0a6afbe19cf577e7f859551f5b2cea831f05e6d8bcb8b172734d4cb24a5 -size 12705 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_25,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_25,NEXUS_5,1.0,en].png deleted file mode 100644 index 0bd7a71ce8..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_25,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7cb16b8f9577c2351669cb2824cd27f1d8674d17f152b5191b7c8ee551502596 -size 13771 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_26,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_26,NEXUS_5,1.0,en].png deleted file mode 100644 index 4a8d17d4e8..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_26,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:42f76a9cbd9a4507f7b78654c9049f0397af6755a2f43fe4628e802afc04cd6d -size 15196 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_27,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_27,NEXUS_5,1.0,en].png deleted file mode 100644 index 939fe6814a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_27,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c3374b825842bc099cb24e2ead2e9d6de89d306201aaedbae16bd74a6f39bf0b -size 13336 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index af81e76f00..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4d40489903e1fa61d91ae44bda36fa2f59f81357edb441a198b27f6f928f6c70 -size 21654 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 1288669d86..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca84726aa42db2d961b328d3ba34523f783f215fed36d049da1cf8a503d0dca7 -size 13304 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_5,NEXUS_5,1.0,en].png deleted file mode 100644 index 4332acdbc2..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_5,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:75db8e2faba1070c628a79e193679b67438a8ae0d484f72e52e32d8411605baa -size 14412 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_6,NEXUS_5,1.0,en].png deleted file mode 100644 index e509223e06..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_6,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4768efca6260f49e1bbef7369a23a901a27c3ed5c67fa9e06f751fbd608233b -size 16426 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_7,NEXUS_5,1.0,en].png deleted file mode 100644 index 52eeb73909..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_7,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:016da7515b03414283291b2daa74b0db79eb3b26fab6724655d3242222aba861 -size 14713 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_8,NEXUS_5,1.0,en].png deleted file mode 100644 index a25e42f8de..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_8,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0ff91c8812358efc55693fb855aa1c7bb5f617ebbf6fad7f57ab5cbe3b8a6123 -size 15323 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_9,NEXUS_5,1.0,en].png deleted file mode 100644 index 84e9bf7098..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_9,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e7dd7bdb6bf394ae39f75cafc9d9424becb483d61140bbc11eb374eb0173bd5 -size 16402 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-10_12_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-10_12_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-10_12_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-10_12_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-11_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-10_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-11_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-10_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-11_13_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-10_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-11_13_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-10_12_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..94f6c889ab --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4693928382d102599e18c2254c58451c854c304b19706ecb02b832c92ddf15ef +size 47041 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index 5cc0279077..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1625ac34428f660c235d1d64f5de867baa6c0ca296f0a93d81588d633d6a74bf -size 30082 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..b1929f4a50 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deeab9451d51a2b3403f1d5711d0cf64b762847a674ae78f4232ce02fed575f7 +size 46014 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index f7230cc774..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:264d9373767b6b59d0cea4bfa4d148a453058be70e7805581fe96d7448ef5232 -size 29978 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 550aa8b2d6..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:278af98d1153e54ceb4cd98e52b860feb32690fdfb8ac61b9ff79fad30f36726 -size 5992 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index d7ab0ee9a3..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ef93fb1bb8d82a1033ac6925e0098a376cde96288ecff6c9243494653a890491 -size 6412 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 36c83da7ff..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d3d45d38defca9e015a990dd6eba774feee5609cf46db2bbb975eefe30caf6f0 -size 5894 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index ca6e3cafc5..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c5b7f8692bcd687fab47b07943e21c3d5fbad3e7195abae66534a58d559a832 -size 6287 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-2_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-2_3_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-2_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-2_4_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-1_2_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-1_2_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-1_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-1_3_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..3b19a76226 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34afdcdb8cd199ff67ff628aef28757381c5f5f4bed57131f5eac2ae7423894f +size 80573 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..3b19a76226 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34afdcdb8cd199ff67ff628aef28757381c5f5f4bed57131f5eac2ae7423894f +size 80573 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..b29f4c6e61 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5509141f2b39c0f4330ef256687b31f0d421040f58719a62aad34f6a224e1cf4 +size 90443 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..2632ca4b08 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a3ea7afa73bfd0ace6999afa7cefd0f99069808b0cb10601e7c674b7f45ea0e +size 80631 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..72c76f3eaf --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bd9d6331dfe578c1755f3f3c5cf52bafb6b7d0bd811c122daa79adf5066e72a +size 102780 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 04e66baed8..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9614bc44d3fd57a5cdaa748206d40600719c67423f40229834acb2d6a24c0e4f -size 64556 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index 04e66baed8..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9614bc44d3fd57a5cdaa748206d40600719c67423f40229834acb2d6a24c0e4f -size 64556 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,en].png deleted file mode 100644 index 19b6010d17..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:46e28da384551af27bf9c52a45c17b8441f8875494b3d3fd901ad66f5d7ff89b -size 74803 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index 599fc248db..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:74fff26971e19474cb2afc2f8d057060e42d0fc84d5bb5f09aee1a59e5660425 -size 64571 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index ce607f3a17..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b0b6dc3e2c4757b00ad0670dfb00aa738a31a6943d05e775668c8f2ee625ec71 -size 65594 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 75f6ddbf13..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8636ed7c3fa6ec9066b3a7f4fe0e8e4e90c347a757087ff2f8b75113de72ca5c -size 65911 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,en].png deleted file mode 100644 index 872429b353..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f314f241b95aeaccd576c8235cfd907abaf5d796b5dc6f4e2acac8a4b9c7c2d -size 88678 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..47770ec085 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cb1163e0853dfb5df0f922095a36a4d183decc24a9e4736861186dda30b77cc +size 82859 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..47770ec085 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cb1163e0853dfb5df0f922095a36a4d183decc24a9e4736861186dda30b77cc +size 82859 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..b73d290584 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b3263df594697683a84f15268faeb69709bd3bf0cbb4770a4ce883cad599a2e +size 91815 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e99f9fab72 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89d0f544f879c7d2fad983cac29f3f58e7aac2d6e0530151b4f51ecef3628aaa +size 82318 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f4de24344f --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fce8f9d8f11b55c390fd8136f7f005ca7bc199e36c5231b9ac3b6118e2e7b5c +size 104166 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index f44c90e57a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f32d213da8288b97cb3c1f5626e970590fc15c9408c73bf894e1cea40b80e264 -size 67034 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index f44c90e57a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f32d213da8288b97cb3c1f5626e970590fc15c9408c73bf894e1cea40b80e264 -size 67034 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_12,NEXUS_5,1.0,en].png deleted file mode 100644 index 52eccc7865..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_12,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58ce650742396cd4addf9f545b2488bc2666e848b361a501d3ea2508c92c2a8a -size 76908 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index d05120d85c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7831c939184da796af8f2e26e64999a561c9d8fc9b510d1e7563cc30cc47d34c -size 66512 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index cf970e20c6..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a0afc5774dbe627c6f76a65a27037c1837f8c2a122b68345c2792fc088ee497a -size 68542 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 547dceae04..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4f235335760631e7d5258c638cabd896174cc3888ec7fe786769bb53cb306d35 -size 68907 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_7,NEXUS_5,1.0,en].png deleted file mode 100644 index 2728c83aa1..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_7,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:59c4e7f70dbef1f7c95edc705729dc37f7be3e96f48264e5b63c51f92c13aa22 -size 90762 From 97e79d94d14f56b1d7fae8d1e35db2d8a65426c6 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 16 Apr 2024 16:46:15 +0200 Subject: [PATCH 011/289] Room list invite: remove remaining inviteList test --- .../element/android/x/intent/IntentProviderImplTest.kt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/app/src/test/kotlin/io/element/android/x/intent/IntentProviderImplTest.kt b/app/src/test/kotlin/io/element/android/x/intent/IntentProviderImplTest.kt index 340af6f4a8..b8b854d158 100644 --- a/app/src/test/kotlin/io/element/android/x/intent/IntentProviderImplTest.kt +++ b/app/src/test/kotlin/io/element/android/x/intent/IntentProviderImplTest.kt @@ -67,16 +67,6 @@ class IntentProviderImplTest { assertThat(result.data.toString()).isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId") } - @Test - fun `test getInviteListIntent`() { - val sut = createIntentProviderImpl() - val result = sut.getInviteListIntent( - sessionId = A_SESSION_ID, - ) - result.commonAssertions() - assertThat(result.data.toString()).isEqualTo("elementx://open/@alice:server.org/invites") - } - private fun createIntentProviderImpl(): IntentProviderImpl { return IntentProviderImpl( context = RuntimeEnvironment.getApplication() as Context, From 2ae69314860a98c866f47a56f1c79a3312d4105d Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 16 Apr 2024 21:18:54 +0200 Subject: [PATCH 012/289] Timeline : expose new pagination status api --- .../impl/timeline/RoomTimelineExtensions.kt | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt index f8109259d5..400ff8fffd 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt @@ -27,13 +27,14 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.catch -import org.matrix.rustcomponents.sdk.BackPaginationStatusListener +import org.matrix.rustcomponents.sdk.PaginationStatusListener +import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.Timeline import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineItem import org.matrix.rustcomponents.sdk.TimelineListener import timber.log.Timber -import uniffi.matrix_sdk_ui.BackPaginationStatus +import uniffi.matrix_sdk_ui.PaginationStatus internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List) -> Unit): Flow> = callbackFlow { @@ -58,17 +59,28 @@ internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List = - mxCallbackFlow { - val listener = object : BackPaginationStatusListener { - override fun onUpdate(status: BackPaginationStatus) { +internal fun Timeline.backPaginationStatusFlow(): Flow = + paginationStatusFlow { listener -> + subscribeToBackPaginationStatus(listener) + } + +internal fun Timeline.forwardPaginationStatusFlow(): Flow = + paginationStatusFlow { listener -> + subscribeToForwardPaginationStatus(listener) + } + +private fun paginationStatusFlow(subscriber: suspend (PaginationStatusListener)->TaskHandle): Flow{ + return mxCallbackFlow { + val listener = object : PaginationStatusListener { + override fun onUpdate(status: PaginationStatus) { trySendBlocking(status) } } tryOrNull { - subscribeToBackPaginationStatus(listener) + subscriber(listener) } }.buffer(Channel.UNLIMITED) +} internal suspend fun Timeline.runWithTimelineListenerRegistered(action: suspend () -> Unit) { val result = addListener(NoOpTimelineListener) From a427d2ea6cf5aa25ffd873f19b5fe62bd14a2030 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 19:44:41 +0000 Subject: [PATCH 013/289] Update danger/danger-js action to v12 --- .github/workflows/danger.yml | 2 +- .github/workflows/quality.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml index e1c9205473..21787629fd 100644 --- a/.github/workflows/danger.yml +++ b/.github/workflows/danger.yml @@ -11,7 +11,7 @@ jobs: - run: | npm install --save-dev @babel/plugin-transform-flow-strip-types - name: Danger - uses: danger/danger-js@11.3.1 + uses: danger/danger-js@12.1.0 with: args: "--dangerfile ./tools/danger/dangerfile.js" env: diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index dfd5315c9f..0a439cecee 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -72,7 +72,7 @@ jobs: yarn add danger-plugin-lint-report --dev - name: Danger lint if: always() - uses: danger/danger-js@11.3.1 + uses: danger/danger-js@12.1.0 with: args: "--dangerfile ./tools/danger/dangerfile-lint.js" env: From 117d53dbc571fb85e5e3e6ff12f874e5df66f70d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 08:25:59 +0200 Subject: [PATCH 014/289] version++ --- plugins/src/main/kotlin/Versions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/src/main/kotlin/Versions.kt b/plugins/src/main/kotlin/Versions.kt index 166fde2aab..ad430d9a44 100644 --- a/plugins/src/main/kotlin/Versions.kt +++ b/plugins/src/main/kotlin/Versions.kt @@ -56,7 +56,7 @@ private const val versionMinor = 4 // Note: even values are reserved for regular release, odd values for hotfix release. // When creating a hotfix, you should decrease the value, since the current value // is the value for the next regular release. -private const val versionPatch = 10 +private const val versionPatch = 11 object Versions { val versionCode = 4_000_000 + versionMajor * 1_00_00 + versionMinor * 1_00 + versionPatch From f2ff3269384900301096439c6e5e53c5ac4a0b01 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 13:21:11 +0200 Subject: [PATCH 015/289] Observe ignoredUsersFlow to have live data about blocked user. This will also ensure that blocking a user will work even if the user is not a member of the room (preparatory work for user permalink) --- .../details/RoomMemberDetailsPresenter.kt | 45 ++++++++----------- .../RoomMemberDetailsPresenterTests.kt | 31 +++++++++---- .../libraries/matrix/test/FakeMatrixClient.kt | 5 +++ 3 files changed, 46 insertions(+), 35 deletions(-) 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 cb749d2c80..04c59c866f 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 @@ -39,6 +39,10 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.ui.room.getRoomMemberAsState import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch class RoomMemberDetailsPresenter @AssistedInject constructor( @@ -57,14 +61,13 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( var confirmationDialog by remember { mutableStateOf(null) } val roomMember by room.getRoomMemberAsState(roomMemberId) val startDmActionState: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } - // the room member is not really live... - val isBlocked: MutableState> = remember(roomMember) { - val isIgnored = roomMember?.isIgnored - if (isIgnored == null) { - mutableStateOf(AsyncData.Uninitialized) - } else { - mutableStateOf(AsyncData.Success(isIgnored)) - } + val isBlocked: MutableState> = remember { mutableStateOf(AsyncData.Uninitialized) } + LaunchedEffect(Unit) { + client.ignoredUsersFlow + .map { ignoredUsers -> roomMemberId in ignoredUsers } + .distinctUntilChanged() + .onEach { isBlocked.value = AsyncData.Success(it) } + .launchIn(this) } LaunchedEffect(Unit) { // Update room member info when opening this screen @@ -132,28 +135,18 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( private fun CoroutineScope.blockUser(userId: UserId, isBlockedState: MutableState>) = launch { isBlockedState.value = AsyncData.Loading(false) client.ignoreUser(userId) - .fold( - onSuccess = { - isBlockedState.value = AsyncData.Success(true) - room.getUpdatedMember(userId) - }, - onFailure = { - isBlockedState.value = AsyncData.Failure(it, false) - } - ) + .onFailure { + isBlockedState.value = AsyncData.Failure(it, false) + } + // Note: on success, ignoredUserList will be updated. } private fun CoroutineScope.unblockUser(userId: UserId, isBlockedState: MutableState>) = launch { isBlockedState.value = AsyncData.Loading(true) client.unignoreUser(userId) - .fold( - onSuccess = { - isBlockedState.value = AsyncData.Success(false) - room.getUpdatedMember(userId) - }, - onFailure = { - isBlockedState.value = AsyncData.Failure(it, true) - } - ) + .onFailure { + isBlockedState.value = AsyncData.Failure(it, true) + } + // Note: on success, ignoredUserList will be updated. } } diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt index e1f0d76ec0..4d1d469f8f 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt @@ -18,6 +18,7 @@ package io.element.android.features.roomdetails.members.details import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow +import app.cash.turbine.ReceiveTurbine import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.createroom.api.StartDMAction @@ -63,7 +64,7 @@ class RoomMemberDetailsPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - val initialState = awaitItem() + val initialState = awaitFirstItem() assertThat(initialState.userId).isEqualTo(roomMember.userId.value) assertThat(initialState.userName).isEqualTo(roomMember.displayName) assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl) @@ -90,7 +91,7 @@ class RoomMemberDetailsPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - val initialState = awaitItem() + val initialState = awaitFirstItem() assertThat(initialState.userName).isEqualTo(roomMember.displayName) assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl) @@ -113,7 +114,7 @@ class RoomMemberDetailsPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - val initialState = awaitItem() + val initialState = awaitFirstItem() assertThat(initialState.userName).isEqualTo(roomMember.displayName) assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl) @@ -127,7 +128,7 @@ class RoomMemberDetailsPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - val initialState = awaitItem() + val initialState = awaitFirstItem() initialState.eventSink(RoomMemberDetailsEvents.BlockUser(needsConfirmation = true)) val dialogState = awaitItem() @@ -142,17 +143,24 @@ class RoomMemberDetailsPresenterTests { @Test fun `present - BlockUser and UnblockUser without confirmation change the 'blocked' state`() = runTest { - val presenter = createRoomMemberDetailsPresenter() + val client = FakeMatrixClient() + val roomMember = aRoomMember() + val presenter = createRoomMemberDetailsPresenter( + client = client, + roomMember = roomMember, + ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - val initialState = awaitItem() + val initialState = awaitFirstItem() initialState.eventSink(RoomMemberDetailsEvents.BlockUser(needsConfirmation = false)) assertThat(awaitItem().isBlocked.isLoading()).isTrue() + client.emitIgnoreUserList(listOf(roomMember.userId)) assertThat(awaitItem().isBlocked.dataOrNull()).isTrue() initialState.eventSink(RoomMemberDetailsEvents.UnblockUser(needsConfirmation = false)) assertThat(awaitItem().isBlocked.isLoading()).isTrue() + client.emitIgnoreUserList(listOf()) assertThat(awaitItem().isBlocked.dataOrNull()).isFalse() } } @@ -165,7 +173,7 @@ class RoomMemberDetailsPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - val initialState = awaitItem() + val initialState = awaitFirstItem() initialState.eventSink(RoomMemberDetailsEvents.BlockUser(needsConfirmation = false)) assertThat(awaitItem().isBlocked.isLoading()).isTrue() val errorState = awaitItem() @@ -182,7 +190,7 @@ class RoomMemberDetailsPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - val initialState = awaitItem() + val initialState = awaitFirstItem() initialState.eventSink(RoomMemberDetailsEvents.UnblockUser(needsConfirmation = true)) val dialogState = awaitItem() @@ -202,7 +210,7 @@ class RoomMemberDetailsPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - val initialState = awaitItem() + val initialState = awaitFirstItem() assertThat(initialState.startDmActionState).isInstanceOf(AsyncAction.Uninitialized::class.java) val startDMSuccessResult = AsyncAction.Success(A_ROOM_ID) val startDMFailureResult = AsyncAction.Failure(A_THROWABLE) @@ -229,6 +237,11 @@ class RoomMemberDetailsPresenterTests { } } + private suspend fun ReceiveTurbine.awaitFirstItem(): T { + skipItems(1) + return awaitItem() + } + private fun createRoomMemberDetailsPresenter( client: MatrixClient = FakeMatrixClient(), room: MatrixRoom = aMatrixRoom(), diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 7e86f29cb7..3feb161cb3 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -48,6 +48,7 @@ import io.element.android.libraries.matrix.test.verification.FakeSessionVerifica import io.element.android.tests.testutils.simulateLongTask import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow @@ -205,6 +206,10 @@ class FakeMatrixClient( return RoomMembershipObserver() } + suspend fun emitIgnoreUserList(users: List) { + ignoredUsersFlow.emit(users.toImmutableList()) + } + // Mocks fun givenLogoutError(failure: Throwable?) { From c9d59616843a30e7891c145cf612b11d85be87ba Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 11:44:28 +0200 Subject: [PATCH 016/289] RoomMemberDetailsPresenter: fallback to user profile data if the user is not a member of the room. This can be displayed when the user click on a non-member user permalink. --- .../details/RoomMemberDetailsPresenter.kt | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) 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 04c59c866f..81263b504c 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 @@ -21,7 +21,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue @@ -37,6 +36,7 @@ import io.element.android.libraries.matrix.api.MatrixClient 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.MatrixRoom +import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.room.getRoomMemberAsState import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.distinctUntilChanged @@ -60,6 +60,7 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( val coroutineScope = rememberCoroutineScope() var confirmationDialog by remember { mutableStateOf(null) } val roomMember by room.getRoomMemberAsState(roomMemberId) + var userProfile by remember { mutableStateOf(null) } val startDmActionState: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } val isBlocked: MutableState> = remember { mutableStateOf(AsyncData.Uninitialized) } LaunchedEffect(Unit) { @@ -74,6 +75,9 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( // We don't need to assign the result as it will be automatically propagated by `room.getRoomMemberAsState` room.getUpdatedMember(roomMemberId) } + LaunchedEffect(Unit) { + userProfile = client.getProfile(roomMemberId).getOrNull() + } fun handleEvents(event: RoomMemberDetailsEvents) { when (event) { @@ -108,16 +112,26 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( } } - val userName by produceState(initialValue = roomMember?.displayName) { - room.userDisplayName(roomMemberId).onSuccess { displayName -> - if (displayName != null) value = displayName - } + var userName: String? by remember { mutableStateOf(roomMember?.displayName ?: userProfile?.displayName) } + LaunchedEffect(roomMember, userProfile) { + userName = room.userDisplayName(roomMemberId) + .fold( + onSuccess = { it }, + onFailure = { + // Fallback to user profile + userProfile?.displayName + }) } - val userAvatar by produceState(initialValue = roomMember?.avatarUrl) { - room.userAvatarUrl(roomMemberId).onSuccess { avatarUrl -> - if (avatarUrl != null) value = avatarUrl - } + var userAvatar: String? by remember { mutableStateOf(roomMember?.avatarUrl ?: userProfile?.avatarUrl) } + LaunchedEffect(roomMember, userProfile) { + userAvatar = room.userAvatarUrl(roomMemberId) + .fold( + onSuccess = { it }, + onFailure = { + // Fallback to user profile + userProfile?.avatarUrl + }) } return RoomMemberDetailsState( @@ -127,7 +141,7 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( isBlocked = isBlocked.value, startDmActionState = startDmActionState.value, displayConfirmationDialog = confirmationDialog, - isCurrentUser = client.isMe(roomMember?.userId), + isCurrentUser = client.isMe(roomMemberId), eventSink = ::handleEvents ) } From 0dba614c0a8432ac427efb11b233b58bbc9318f9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 13:35:16 +0200 Subject: [PATCH 017/289] createRoomMemberDetailsPresenter just need a UserId. --- .../details/RoomMemberDetailsPresenterTests.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt index 4d1d469f8f..4eefdd100a 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt @@ -31,9 +31,9 @@ import io.element.android.features.roomdetails.impl.members.details.RoomMemberDe import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState -import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_THROWABLE import io.element.android.libraries.matrix.test.FakeMatrixClient @@ -59,7 +59,7 @@ class RoomMemberDetailsPresenterTests { } val presenter = createRoomMemberDetailsPresenter( room = room, - roomMember = roomMember + roomMemberId = roomMember.userId ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -86,7 +86,7 @@ class RoomMemberDetailsPresenterTests { } val presenter = createRoomMemberDetailsPresenter( room = room, - roomMember = roomMember + roomMemberId = roomMember.userId ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -109,7 +109,7 @@ class RoomMemberDetailsPresenterTests { } val presenter = createRoomMemberDetailsPresenter( room = room, - roomMember = roomMember + roomMemberId = roomMember.userId ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -147,7 +147,7 @@ class RoomMemberDetailsPresenterTests { val roomMember = aRoomMember() val presenter = createRoomMemberDetailsPresenter( client = client, - roomMember = roomMember, + roomMemberId = roomMember.userId ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -245,11 +245,11 @@ class RoomMemberDetailsPresenterTests { private fun createRoomMemberDetailsPresenter( client: MatrixClient = FakeMatrixClient(), room: MatrixRoom = aMatrixRoom(), - roomMember: RoomMember = aRoomMember(), + roomMemberId: UserId = UserId("@alice:server.org"), startDMAction: StartDMAction = FakeStartDMAction() ): RoomMemberDetailsPresenter { return RoomMemberDetailsPresenter( - roomMemberId = roomMember.userId, + roomMemberId = roomMemberId, client = client, room = room, startDMAction = startDMAction From 4d50e43e85bdd56b317d4365c53a25b1a9bc67af Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 13:42:03 +0200 Subject: [PATCH 018/289] Add test covering fallback to user profile. --- .../RoomMemberDetailsPresenterTests.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt index 4eefdd100a..428ececea0 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt @@ -37,6 +37,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_THROWABLE import io.element.android.libraries.matrix.test.FakeMatrixClient +import io.element.android.libraries.matrix.ui.components.aMatrixUser import io.element.android.tests.testutils.WarmUpRule import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -122,6 +123,33 @@ class RoomMemberDetailsPresenterTests { } } + @Test + fun `present - will fallback to user profile if user is not a member of the room`() = runTest { + val bobProfile = aMatrixUser("@bob:server.org", "Bob", avatarUrl = "anAvatarUrl") + val room = aMatrixRoom().apply { + givenUserDisplayNameResult(Result.failure(Exception("Not a member!"))) + givenUserAvatarUrlResult(Result.failure(Exception("Not a member!"))) + } + val client = FakeMatrixClient().apply { + givenGetProfileResult(bobProfile.userId, Result.success(bobProfile)) + } + val presenter = createRoomMemberDetailsPresenter( + client = client, + room = room, + roomMemberId = UserId("@bob:server.org") + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + skipItems(2) + val initialState = awaitFirstItem() + assertThat(initialState.userName).isEqualTo("Bob") + assertThat(initialState.avatarUrl).isEqualTo("anAvatarUrl") + + ensureAllEventsConsumed() + } + } + @Test fun `present - BlockUser needing confirmation displays confirmation dialog`() = runTest { val presenter = createRoomMemberDetailsPresenter() From 47e1d6fb0cd3f1502459d78c614e6d242955077c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 13:43:17 +0200 Subject: [PATCH 019/289] Changelog --- changelog.d/2721.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2721.misc diff --git a/changelog.d/2721.misc b/changelog.d/2721.misc new file mode 100644 index 0000000000..2c38dc4ac7 --- /dev/null +++ b/changelog.d/2721.misc @@ -0,0 +1 @@ +RoomMember screen: fallback to userProfile data, if the member is not a user of the room. From 3f0159d4387fa4cb9e18d3ce819dbd18ed093304 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 14:01:03 +0200 Subject: [PATCH 020/289] Format --- .../impl/members/details/RoomMemberDetailsPresenter.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 81263b504c..5c98a048ff 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 @@ -120,7 +120,8 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( onFailure = { // Fallback to user profile userProfile?.displayName - }) + } + ) } var userAvatar: String? by remember { mutableStateOf(roomMember?.avatarUrl ?: userProfile?.avatarUrl) } @@ -131,7 +132,8 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( onFailure = { // Fallback to user profile userProfile?.avatarUrl - }) + } + ) } return RoomMemberDetailsState( From f9d3f947c2cbd1654ad35e20287287476a36f5b4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 14:44:16 +0200 Subject: [PATCH 021/289] Add missing test for unblock user with error. --- .../RoomMemberDetailsPresenterTests.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt index 428ececea0..4c8b944c8a 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt @@ -212,6 +212,25 @@ class RoomMemberDetailsPresenterTests { } } + @Test + fun `present - UnblockUser with error`() = runTest { + val matrixClient = FakeMatrixClient() + matrixClient.givenUnignoreUserResult(Result.failure(A_THROWABLE)) + val presenter = createRoomMemberDetailsPresenter(client = matrixClient) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink(RoomMemberDetailsEvents.UnblockUser(needsConfirmation = false)) + assertThat(awaitItem().isBlocked.isLoading()).isTrue() + val errorState = awaitItem() + assertThat(errorState.isBlocked.errorOrNull()).isEqualTo(A_THROWABLE) + // Clear error + initialState.eventSink(RoomMemberDetailsEvents.ClearBlockUserError) + assertThat(awaitItem().isBlocked).isEqualTo(AsyncData.Success(true)) + } + } + @Test fun `present - UnblockUser needing confirmation displays confirmation dialog`() = runTest { val presenter = createRoomMemberDetailsPresenter() From 5b3a2d8ecafc79993f5c76f934c99d07bc664002 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 16:15:36 +0200 Subject: [PATCH 022/289] Use produceState and fetch profile only if necessary. --- .../details/RoomMemberDetailsPresenter.kt | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) 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 5c98a048ff..dcb953e978 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 @@ -21,6 +21,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue @@ -74,9 +75,10 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( // Update room member info when opening this screen // We don't need to assign the result as it will be automatically propagated by `room.getRoomMemberAsState` room.getUpdatedMember(roomMemberId) - } - LaunchedEffect(Unit) { - userProfile = client.getProfile(roomMemberId).getOrNull() + .onFailure { + // Not a member of the room, try to get the user profile + userProfile = client.getProfile(roomMemberId).getOrNull() + } } fun handleEvents(event: RoomMemberDetailsEvents) { @@ -112,9 +114,12 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( } } - var userName: String? by remember { mutableStateOf(roomMember?.displayName ?: userProfile?.displayName) } - LaunchedEffect(roomMember, userProfile) { - userName = room.userDisplayName(roomMemberId) + val userName: String? by produceState( + initialValue = roomMember?.displayName ?: userProfile?.displayName, + key1 = roomMember, + key2 = userProfile, + ) { + value = room.userDisplayName(roomMemberId) .fold( onSuccess = { it }, onFailure = { @@ -124,9 +129,12 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( ) } - var userAvatar: String? by remember { mutableStateOf(roomMember?.avatarUrl ?: userProfile?.avatarUrl) } - LaunchedEffect(roomMember, userProfile) { - userAvatar = room.userAvatarUrl(roomMemberId) + val userAvatar: String? by produceState( + initialValue = roomMember?.avatarUrl ?: userProfile?.avatarUrl, + key1 = roomMember, + key2 = userProfile, + ) { + value = room.userAvatarUrl(roomMemberId) .fold( onSuccess = { it }, onFailure = { From 9f91f0bd815a6860b5d4814be2eec50bc83ed3c5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:21:45 +0000 Subject: [PATCH 023/289] Update dependency androidx.compose.compiler:compiler to v1.5.12 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6ab79bb7aa..97f8f51a06 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ media3 = "1.3.1" # Compose compose_bom = "2024.04.00" -composecompiler = "1.5.11" +composecompiler = "1.5.12" # Coroutines coroutines = "1.8.0" From 83e7c13618a52b5b12cfd1174e5a0924577f43fa Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 17 Apr 2024 21:32:02 +0200 Subject: [PATCH 024/289] Timeline : start reworking timeline apis --- .../features/messages/impl/MessagesView.kt | 9 +- .../messages/impl/timeline/TimelineEvents.kt | 3 +- .../impl/timeline/TimelinePresenter.kt | 20 +- .../messages/impl/timeline/TimelineState.kt | 5 +- .../impl/timeline/TimelineStateProvider.kt | 25 +- .../messages/impl/timeline/TimelineView.kt | 26 +-- .../timeline/components/TimelineItemRow.kt | 2 + .../components/TimelineItemVirtualRow.kt | 16 ++ .../virtual/TimelineItemVirtualFactory.kt | 7 + .../TimelineItemLoadingIndicatorModel.kt | 24 ++ .../virtual/TimelineItemRoomBeginningModel.kt | 21 ++ .../impl/timeline/TimelinePresenterTest.kt | 13 +- .../impl/timeline/TimelineViewTest.kt | 2 - .../features/poll/impl/data/PollRepository.kt | 2 +- .../poll/impl/history/PollHistoryPresenter.kt | 16 +- .../libraries/matrix/api/room/MatrixRoom.kt | 4 +- .../matrix/api/timeline/DetachedTimeline.kt | 24 ++ .../matrix/api/timeline/LiveTimeline.kt | 25 ++ .../matrix/api/timeline/MatrixTimeline.kt | 48 ---- .../libraries/matrix/api/timeline/Timeline.kt | 34 +++ .../item/virtual/VirtualTimelineItem.kt | 7 + .../matrix/impl/room/RustMatrixRoom.kt | 24 +- .../impl/timeline/AsyncMatrixTimeline.kt | 106 --------- .../impl/timeline/RustDetachedTimeline.kt | 20 ++ .../matrix/impl/timeline/RustLiveTimeline.kt | 198 ++++++++++++++++ .../impl/timeline/RustMatrixTimeline.kt | 220 +----------------- .../matrix/impl/timeline/TimelineFlows.kt | 40 ++++ .../HasEncryptionHistoryBanner.kt | 26 +++ .../LoadingIndicatorsPostProcessor.kt | 44 ++++ ...essor.kt => RoomBeginningPostProcessor.kt} | 27 ++- .../DmBeginningTimelineProcessorTest.kt | 24 +- .../matrix/test/room/FakeMatrixRoom.kt | 1 - .../test/timeline/FakeMatrixTimeline.kt | 1 - 33 files changed, 593 insertions(+), 471 deletions(-) create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingIndicatorModel.kt create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemRoomBeginningModel.kt create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/DetachedTimeline.kt create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/LiveTimeline.kt delete mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/MatrixTimeline.kt create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt delete mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/AsyncMatrixTimeline.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustDetachedTimeline.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustLiveTimeline.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineFlows.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt rename libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/{DmBeginningTimelineProcessor.kt => RoomBeginningPostProcessor.kt} (73%) 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 9cf4375769..597fd4b8c9 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 @@ -382,20 +382,19 @@ private fun MessagesViewContent( }, content = { paddingValues -> TimelineView( - modifier = Modifier.padding(paddingValues), state = state.timelineState, - roomName = state.roomName.dataOrNull(), typingNotificationState = state.typingNotificationState, - onMessageClicked = onMessageClicked, - onMessageLongClicked = onMessageLongClicked, onUserDataClicked = onUserDataClicked, onLinkClicked = onLinkClicked, + onMessageClicked = onMessageClicked, + onMessageLongClicked = onMessageLongClicked, onTimestampClicked = onTimestampClicked, + onSwipeToReply = onSwipeToReply, onReactionClicked = onReactionClicked, onReactionLongClicked = onReactionLongClicked, onMoreReactionsClicked = onMoreReactionsClicked, onReadReceiptClick = onReadReceiptClick, - onSwipeToReply = onSwipeToReply, + modifier = Modifier.padding(paddingValues), forceJumpToBottomVisibility = forceJumpToBottomVisibility, ) }, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt index cf02664a98..62ec074bea 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt @@ -19,7 +19,6 @@ package io.element.android.features.messages.impl.timeline import io.element.android.libraries.matrix.api.core.EventId sealed interface TimelineEvents { - data object LoadMore : TimelineEvents data class SetHighlightedEvent(val eventId: EventId?) : TimelineEvents data class OnScrollFinished(val firstIndex: Int) : TimelineEvents @@ -28,6 +27,8 @@ sealed interface TimelineEvents { */ sealed interface EventFromTimelineItem : TimelineEvents + data class LoadMore(val backwards: Boolean) : EventFromTimelineItem + /** * Events coming from a poll item. */ diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt index 3cd525c614..eede76dae9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt @@ -54,9 +54,6 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -private const val BACK_PAGINATION_EVENT_LIMIT = 20 -private const val BACK_PAGINATION_PAGE_SIZE = 50 - class TimelinePresenter @AssistedInject constructor( private val timelineItemsFactory: TimelineItemsFactory, private val room: MatrixRoom, @@ -73,7 +70,7 @@ class TimelinePresenter @AssistedInject constructor( fun create(navigator: MessagesNavigator): TimelinePresenter } - private val timeline = room.timeline + private val timeline = room.liveTimeline @Composable override fun present(): TimelineState { @@ -85,7 +82,7 @@ class TimelinePresenter @AssistedInject constructor( val lastReadReceiptId = rememberSaveable { mutableStateOf(null) } val timelineItems by timelineItemsFactory.collectItemsAsState() - val paginationState by timeline.paginationState.collectAsState() + val paginationState by timeline.backPaginationStatus.collectAsState() val syncUpdateFlow = room.syncUpdateFlow.collectAsState() val userHasPermissionToSendMessage by room.canSendMessageAsState(type = MessageEventType.ROOM_MESSAGE, updateKey = syncUpdateFlow.value) @@ -99,7 +96,13 @@ class TimelinePresenter @AssistedInject constructor( fun handleEvents(event: TimelineEvents) { when (event) { - TimelineEvents.LoadMore -> localScope.paginateBackwards() + is TimelineEvents.LoadMore -> { + if(event.backwards) { + localScope.paginateBackwards() + }else{ + //TODO implement pagination forward + } + } is TimelineEvents.SetHighlightedEvent -> highlightedEventId.value = event.eventId is TimelineEvents.OnScrollFinished -> { if (event.firstIndex == 0) { @@ -152,6 +155,7 @@ class TimelinePresenter @AssistedInject constructor( val timelineRoomInfo by remember { derivedStateOf { TimelineRoomInfo( + name = room.displayName, isDm = room.isDm, userHasPermissionToSendMessage = userHasPermissionToSendMessage, userHasPermissionToSendReaction = userHasPermissionToSendReaction, @@ -161,7 +165,7 @@ class TimelinePresenter @AssistedInject constructor( return TimelineState( timelineRoomInfo = timelineRoomInfo, highlightedEventId = highlightedEventId.value, - paginationState = paginationState, + backPaginationStatus = paginationState, timelineItems = timelineItems, renderReadReceipts = renderReadReceipts, newEventState = newItemState.value, @@ -233,6 +237,6 @@ class TimelinePresenter @AssistedInject constructor( } private fun CoroutineScope.paginateBackwards() = launch { - timeline.paginateBackwards(BACK_PAGINATION_EVENT_LIMIT, BACK_PAGINATION_PAGE_SIZE) + timeline.paginateBackwards() } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt index 4e2f9b8d42..650b1874b8 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt @@ -20,7 +20,7 @@ import androidx.compose.runtime.Immutable import io.element.android.features.messages.impl.timeline.model.NewEventState import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline +import io.element.android.libraries.matrix.api.timeline.Timeline import kotlinx.collections.immutable.ImmutableList @Immutable @@ -29,7 +29,7 @@ data class TimelineState( val timelineRoomInfo: TimelineRoomInfo, val renderReadReceipts: Boolean, val highlightedEventId: EventId?, - val paginationState: MatrixTimeline.PaginationState, + val backPaginationStatus: Timeline.PaginationStatus, val newEventState: NewEventState, val eventSink: (TimelineEvents) -> Unit ) @@ -37,6 +37,7 @@ data class TimelineState( @Immutable data class TimelineRoomInfo( val isDm: Boolean, + val name: String?, val userHasPermissionToSendMessage: Boolean, val userHasPermissionToSendReaction: Boolean, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index ae7f62ebd7..19513f08fe 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -34,7 +34,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.TransactionId import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState import kotlinx.collections.immutable.ImmutableList @@ -46,32 +46,31 @@ import kotlin.random.Random fun aTimelineState( timelineItems: ImmutableList = persistentListOf(), - paginationState: MatrixTimeline.PaginationState = aPaginationState(), + paginationState: Timeline.PaginationStatus = aPaginationStatus(), renderReadReceipts: Boolean = false, timelineRoomInfo: TimelineRoomInfo = aTimelineRoomInfo(), eventSink: (TimelineEvents) -> Unit = {}, ) = TimelineState( timelineItems = timelineItems, timelineRoomInfo = timelineRoomInfo, - paginationState = paginationState, + backPaginationStatus = paginationState, renderReadReceipts = renderReadReceipts, highlightedEventId = null, newEventState = NewEventState.None, eventSink = eventSink, ) -fun aPaginationState( - isBackPaginating: Boolean = false, - hasMoreToLoadBackwards: Boolean = true, - beginningOfRoomReached: Boolean = false, -): MatrixTimeline.PaginationState { - return MatrixTimeline.PaginationState( - isBackPaginating = isBackPaginating, - hasMoreToLoadBackwards = hasMoreToLoadBackwards, - beginningOfRoomReached = beginningOfRoomReached, +fun aPaginationStatus( + isPaginating: Boolean = false, + hasMoreToLoad: Boolean = true, +): Timeline.PaginationStatus { + return Timeline.PaginationStatus( + isPaginating = isPaginating, + hasMoreToLoad = hasMoreToLoad, ) } + internal fun aTimelineItemList(content: TimelineItemEventContent): ImmutableList { return persistentListOf( // 3 items (First Middle Last) with isMine = false @@ -230,10 +229,12 @@ internal fun aGroupedEvents( } internal fun aTimelineRoomInfo( + name: String = "Room name", isDm: Boolean = false, userHasPermissionToSendMessage: Boolean = true, ) = TimelineRoomInfo( isDm = isDm, + name = name, userHasPermissionToSendMessage = userHasPermissionToSendMessage, userHasPermissionToSendReaction = true, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 56a2676f43..1eab2fd2a3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -55,7 +55,6 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.messages.impl.timeline.components.TimelineItemRow -import io.element.android.features.messages.impl.timeline.components.virtual.TimelineItemRoomBeginningView import io.element.android.features.messages.impl.timeline.components.virtual.TimelineLoadingMoreIndicator import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.di.aFakeTimelineItemPresenterFactories @@ -79,7 +78,6 @@ import kotlinx.coroutines.launch fun TimelineView( state: TimelineState, typingNotificationState: TypingNotificationState, - roomName: String?, onUserDataClicked: (UserId) -> Unit, onLinkClicked: (String) -> Unit, onMessageClicked: (TimelineItem.Event) -> Unit, @@ -93,9 +91,6 @@ fun TimelineView( modifier: Modifier = Modifier, forceJumpToBottomVisibility: Boolean = false ) { - fun onReachedLoadMore() { - state.eventSink(TimelineEvents.LoadMore) - } fun onScrollFinishedAt(firstVisibleIndex: Int) { state.eventSink(TimelineEvents.OnScrollFinished(firstVisibleIndex)) @@ -152,20 +147,6 @@ fun TimelineView( onSwipeToReply = onSwipeToReply, ) } - if (state.paginationState.hasMoreToLoadBackwards) { - // Do not use key parameter to avoid wrong positioning - item(contentType = "TimelineLoadingMoreIndicator") { - TimelineLoadingMoreIndicator() - LaunchedEffect(Unit) { - onReachedLoadMore() - } - } - } - if (state.paginationState.beginningOfRoomReached && !state.timelineRoomInfo.isDm) { - item(contentType = "BeginningOfRoomReached") { - TimelineItemRoomBeginningView(roomName = roomName) - } - } } TimelineScrollHelper( @@ -272,17 +253,16 @@ internal fun TimelineViewPreview( ) { TimelineView( state = aTimelineState(timelineItems), - roomName = null, typingNotificationState = aTypingNotificationState(), - onMessageClicked = {}, - onTimestampClicked = {}, onUserDataClicked = {}, onLinkClicked = {}, + onMessageClicked = {}, onMessageLongClicked = {}, + onTimestampClicked = {}, + onSwipeToReply = {}, onReactionClicked = { _, _ -> }, onReactionLongClicked = { _, _ -> }, onMoreReactionsClicked = {}, - onSwipeToReply = {}, onReadReceiptClick = {}, forceJumpToBottomVisibility = true, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index 89b223dafe..7c3557b774 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -51,6 +51,8 @@ internal fun TimelineItemRow( is TimelineItem.Virtual -> { TimelineItemVirtualRow( virtual = timelineItem, + timelineRoomInfo = timelineRoomInfo, + eventSink = eventSink, modifier = modifier, ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt index 306c11aaba..9edc7a9ad4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt @@ -17,23 +17,39 @@ package io.element.android.features.messages.impl.timeline.components import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier +import io.element.android.features.messages.impl.timeline.TimelineEvents +import io.element.android.features.messages.impl.timeline.TimelineRoomInfo import io.element.android.features.messages.impl.timeline.components.virtual.TimelineEncryptedHistoryBannerView import io.element.android.features.messages.impl.timeline.components.virtual.TimelineItemDaySeparatorView import io.element.android.features.messages.impl.timeline.components.virtual.TimelineItemReadMarkerView +import io.element.android.features.messages.impl.timeline.components.virtual.TimelineItemRoomBeginningView +import io.element.android.features.messages.impl.timeline.components.virtual.TimelineLoadingMoreIndicator import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemDaySeparatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemEncryptedHistoryBannerVirtualModel +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemRoomBeginningModel @Composable fun TimelineItemVirtualRow( virtual: TimelineItem.Virtual, + timelineRoomInfo: TimelineRoomInfo, + eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit, modifier: Modifier = Modifier ) { when (virtual.model) { is TimelineItemDaySeparatorModel -> TimelineItemDaySeparatorView(virtual.model, modifier) TimelineItemReadMarkerModel -> TimelineItemReadMarkerView() is TimelineItemEncryptedHistoryBannerVirtualModel -> TimelineEncryptedHistoryBannerView(modifier) + TimelineItemRoomBeginningModel -> TimelineItemRoomBeginningView(roomName = timelineRoomInfo.name, modifier = modifier) + is TimelineItemLoadingIndicatorModel -> { + TimelineLoadingMoreIndicator() + LaunchedEffect(key1 = virtual.model.timestamp) { + eventSink(TimelineEvents.LoadMore(virtual.model.backwards)) + } + } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt index 64d08acacb..2efe98e5b3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt @@ -18,7 +18,9 @@ package io.element.android.features.messages.impl.timeline.factories.virtual import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemEncryptedHistoryBannerVirtualModel +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemRoomBeginningModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemVirtualModel import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem @@ -41,6 +43,11 @@ class TimelineItemVirtualFactory @Inject constructor( is VirtualTimelineItem.DayDivider -> daySeparatorFactory.create(inner) is VirtualTimelineItem.ReadMarker -> TimelineItemReadMarkerModel is VirtualTimelineItem.EncryptedHistoryBanner -> TimelineItemEncryptedHistoryBannerVirtualModel + is VirtualTimelineItem.RoomBeginning -> TimelineItemRoomBeginningModel + is VirtualTimelineItem.LoadingIndicator -> TimelineItemLoadingIndicatorModel( + backwards = inner.backwards, + timestamp = inner.timestamp + ) } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingIndicatorModel.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingIndicatorModel.kt new file mode 100644 index 0000000000..7007c56e0f --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingIndicatorModel.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline.model.virtual + +data class TimelineItemLoadingIndicatorModel( + val backwards: Boolean, + val timestamp: Long, +) : TimelineItemVirtualModel { + override val type: String = "TimelineItemLoadingIndicatorModel" +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemRoomBeginningModel.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemRoomBeginningModel.kt new file mode 100644 index 0000000000..8e2abad575 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemRoomBeginningModel.kt @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline.model.virtual + +data object TimelineItemRoomBeginningModel : TimelineItemVirtualModel { + override val type: String = "TimelineItemRoomBeginningModel" +} diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt index 2485e57172..8d5699d4e0 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt @@ -36,7 +36,6 @@ import io.element.android.features.poll.test.actions.FakeSendPollResponseAction import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction @@ -96,15 +95,15 @@ class TimelinePresenterTest { presenter.present() }.test { val initialState = awaitItem() - assertThat(initialState.paginationState.hasMoreToLoadBackwards).isTrue() - assertThat(initialState.paginationState.isBackPaginating).isFalse() + assertThat(initialState.backPaginationStatus.hasMoreToLoadBackwards).isTrue() + assertThat(initialState.backPaginationStatus.isBackPaginating).isFalse() initialState.eventSink.invoke(TimelineEvents.LoadMore) val inPaginationState = awaitItem() - assertThat(inPaginationState.paginationState.isBackPaginating).isTrue() - assertThat(inPaginationState.paginationState.hasMoreToLoadBackwards).isTrue() + assertThat(inPaginationState.backPaginationStatus.isBackPaginating).isTrue() + assertThat(inPaginationState.backPaginationStatus.hasMoreToLoadBackwards).isTrue() val postPaginationState = awaitItem() - assertThat(postPaginationState.paginationState.hasMoreToLoadBackwards).isTrue() - assertThat(postPaginationState.paginationState.isBackPaginating).isFalse() + assertThat(postPaginationState.backPaginationStatus.hasMoreToLoadBackwards).isTrue() + assertThat(postPaginationState.backPaginationStatus.isBackPaginating).isFalse() } } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt index 44fb6270ae..be7df31635 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt @@ -43,7 +43,6 @@ class TimelineViewTest { ) ), typingNotificationState = aTypingNotificationState(), - roomName = null, onUserDataClicked = EnsureNeverCalledWithParam(), onLinkClicked = EnsureNeverCalledWithParam(), onMessageClicked = EnsureNeverCalledWithParam(), @@ -71,7 +70,6 @@ class TimelineViewTest { ) ), typingNotificationState = aTypingNotificationState(), - roomName = null, onUserDataClicked = EnsureNeverCalledWithParam(), onLinkClicked = EnsureNeverCalledWithParam(), onMessageClicked = EnsureNeverCalledWithParam(), diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt index 0b9aa5aee0..952fe97a5a 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt @@ -28,7 +28,7 @@ class PollRepository @Inject constructor( private val room: MatrixRoom, ) { suspend fun getPoll(eventId: EventId): Result = runCatching { - room.timeline + room.liveTimeline .timelineItems .first() .asSequence() diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt index da37891d91..339f02af31 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt @@ -33,7 +33,7 @@ import io.element.android.features.poll.impl.history.model.PollHistoryItems import io.element.android.features.poll.impl.history.model.PollHistoryItemsFactory import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline +import io.element.android.libraries.matrix.api.timeline.Timeline import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch @@ -49,8 +49,8 @@ class PollHistoryPresenter @Inject constructor( @Composable override fun present(): PollHistoryState { // TODO use room.rememberPollHistory() when working properly? - val timeline = room.timeline - val paginationState by timeline.paginationState.collectAsState() + val timeline = room.liveTimeline + val paginationState by timeline.backPaginationStatus.collectAsState() val pollHistoryItemsFlow = remember { timeline.timelineItems.map { items -> pollHistoryItemFactory.create(items) @@ -61,11 +61,11 @@ class PollHistoryPresenter @Inject constructor( } val pollHistoryItems by pollHistoryItemsFlow.collectAsState(initial = PollHistoryItems()) LaunchedEffect(paginationState, pollHistoryItems.size) { - if (pollHistoryItems.size == 0 && paginationState.canBackPaginate) loadMore(timeline) + if (pollHistoryItems.size == 0 && paginationState.canPaginate) loadMore(timeline) } val isLoading by remember { derivedStateOf { - pollHistoryItems.size == 0 || paginationState.isBackPaginating + pollHistoryItems.size == 0 || paginationState.isPaginating } } val coroutineScope = rememberCoroutineScope() @@ -88,14 +88,14 @@ class PollHistoryPresenter @Inject constructor( return PollHistoryState( isLoading = isLoading, - hasMoreToLoad = paginationState.hasMoreToLoadBackwards, + hasMoreToLoad = paginationState.hasMoreToLoad, pollHistoryItems = pollHistoryItems, activeFilter = activeFilter, eventSink = ::handleEvents, ) } - private fun CoroutineScope.loadMore(pollHistory: MatrixTimeline) = launch { - pollHistory.paginateBackwards(200) + private fun CoroutineScope.loadMore(pollHistory: Timeline) = launch { + pollHistory.paginateBackwards() } } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 761d87445a..77898c7a9a 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -31,7 +31,7 @@ import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline +import io.element.android.libraries.matrix.api.timeline.LiveTimeline import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings @@ -97,7 +97,7 @@ interface MatrixRoom : Closeable { val syncUpdateFlow: StateFlow - val timeline: MatrixTimeline + val liveTimeline: LiveTimeline fun destroy() diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/DetachedTimeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/DetachedTimeline.kt new file mode 100644 index 0000000000..d6abdc515f --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/DetachedTimeline.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.timeline + +import kotlinx.coroutines.flow.StateFlow + +interface DetachedTimeline : Timeline { + suspend fun paginateForwards(): Result + val forwardPaginationStatus: StateFlow +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/LiveTimeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/LiveTimeline.kt new file mode 100644 index 0000000000..643b690eee --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/LiveTimeline.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.timeline + +import io.element.android.libraries.matrix.api.core.EventId +import kotlinx.coroutines.flow.Flow + +interface LiveTimeline: Timeline { + val membershipChangeEventReceived: Flow + suspend fun sendReadReceipt(eventId: EventId, receiptType: ReceiptType): Result +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/MatrixTimeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/MatrixTimeline.kt deleted file mode 100644 index 25760afc45..0000000000 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/MatrixTimeline.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.api.timeline - -import io.element.android.libraries.matrix.api.core.EventId -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.StateFlow - -interface MatrixTimeline : AutoCloseable { - data class PaginationState( - val isBackPaginating: Boolean, - val hasMoreToLoadBackwards: Boolean, - val beginningOfRoomReached: Boolean, - ) { - val canBackPaginate = !isBackPaginating && hasMoreToLoadBackwards - - companion object { - val Initial = PaginationState( - isBackPaginating = false, - hasMoreToLoadBackwards = true, - beginningOfRoomReached = false - ) - } - } - - val paginationState: StateFlow - val timelineItems: Flow> - val membershipChangeEventReceived: Flow - - suspend fun paginateBackwards(requestSize: Int): Result - suspend fun paginateBackwards(requestSize: Int, untilNumberOfItems: Int): Result - suspend fun fetchDetailsForEvent(eventId: EventId): Result - suspend fun sendReadReceipt(eventId: EventId, receiptType: ReceiptType): Result -} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt new file mode 100644 index 0000000000..c0f8110e56 --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.timeline + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow + +interface Timeline : AutoCloseable { + + data class PaginationStatus( + val isPaginating: Boolean, + val hasMoreToLoad: Boolean, + ) { + val canPaginate: Boolean = !isPaginating && hasMoreToLoad + } + + suspend fun paginateBackwards(): Result + val backPaginationStatus: StateFlow + val timelineItems: Flow> +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt index 9839d35a27..fbe2a09716 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt @@ -24,4 +24,11 @@ sealed interface VirtualTimelineItem { data object ReadMarker : VirtualTimelineItem data object EncryptedHistoryBanner : VirtualTimelineItem + + data object RoomBeginning: VirtualTimelineItem + + data class LoadingIndicator( + val backwards: Boolean, + val timestamp: Long, + ): VirtualTimelineItem } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 59e5c99efa..d630a33a4a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -42,7 +42,7 @@ import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange import io.element.android.libraries.matrix.api.room.roomNotificationSettings -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline +import io.element.android.libraries.matrix.api.timeline.LiveTimeline import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings @@ -56,7 +56,7 @@ import io.element.android.libraries.matrix.impl.room.location.toInner import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper import io.element.android.libraries.matrix.impl.room.powerlevels.RoomPowerLevelsMapper -import io.element.android.libraries.matrix.impl.timeline.RustMatrixTimeline +import io.element.android.libraries.matrix.impl.timeline.RustLiveTimeline import io.element.android.libraries.matrix.impl.timeline.toRustReceiptType import io.element.android.libraries.matrix.impl.util.mxCallbackFlow import io.element.android.libraries.matrix.impl.widget.RustWidgetDriver @@ -159,7 +159,7 @@ class RustMatrixRoom( private val _roomNotificationSettingsStateFlow = MutableStateFlow(MatrixRoomNotificationSettingsState.Unknown) override val roomNotificationSettingsStateFlow: StateFlow = _roomNotificationSettingsStateFlow - override val timeline = createMatrixTimeline(innerTimeline) { + override val liveTimeline = createLiveTimeline(innerTimeline){ _syncUpdateFlow.value = systemClock.epochMillis() } @@ -169,7 +169,7 @@ class RustMatrixRoom( init { val powerLevelChanges = roomInfoFlow.map { it.userPowerLevels }.distinctUntilChanged() - val membershipChanges = timeline.membershipChangeEventReceived.onStart { emit(Unit) } + val membershipChanges = liveTimeline.membershipChangeEventReceived.onStart { emit(Unit) } combine(membershipChanges, powerLevelChanges) { _, _ -> } // Skip initial one .drop(1) @@ -184,7 +184,7 @@ class RustMatrixRoom( override fun destroy() { roomCoroutineScope.cancel() - timeline.close() + liveTimeline.close() innerRoom.destroy() roomListItem.destroy() specialModeEventTimelineItem?.destroy() @@ -744,18 +744,24 @@ class RustMatrixRoom( } } - private fun createMatrixTimeline( + private fun createLiveTimeline( timeline: InnerTimeline, onNewSyncedEvent: () -> Unit = {}, - ): MatrixTimeline { - return RustMatrixTimeline( + ): LiveTimeline { + return RustLiveTimeline( isKeyBackupEnabled = isKeyBackupEnabled, matrixRoom = this, + systemClock = systemClock, roomCoroutineScope = roomCoroutineScope, dispatcher = roomDispatcher, lastLoginTimestamp = sessionData.loginTimestamp, onNewSyncedEvent = onNewSyncedEvent, - innerTimeline = timeline, + inner = timeline, + fetchDetailsForEvent = { eventId -> + runCatching { + innerTimeline.getEventTimelineItemByEventId(eventId.value) + } + } ) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/AsyncMatrixTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/AsyncMatrixTimeline.kt deleted file mode 100644 index 1ec7e007e9..0000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/AsyncMatrixTimeline.kt +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.impl.timeline - -import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.ReceiptType -import kotlinx.coroutines.CompletableDeferred -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.CoroutineStart -import kotlinx.coroutines.NonCancellable -import kotlinx.coroutines.async -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import timber.log.Timber - -/** - * This class is a wrapper around a [MatrixTimeline] that will be created asynchronously. - */ -@Suppress("unused") -class AsyncMatrixTimeline( - coroutineScope: CoroutineScope, - dispatcher: CoroutineDispatcher, - private val timelineProvider: suspend () -> MatrixTimeline -) : MatrixTimeline { - private val _timelineItems: MutableStateFlow> = - MutableStateFlow(emptyList()) - - private val _paginationState = MutableStateFlow( - MatrixTimeline.PaginationState.Initial - ) - private val timeline = coroutineScope.async(context = dispatcher, start = CoroutineStart.LAZY) { - timelineProvider() - } - private val closeSignal = CompletableDeferred() - - override val membershipChangeEventReceived = MutableSharedFlow(extraBufferCapacity = 1) - - init { - coroutineScope.launch { - val delegateTimeline = timeline.await() - delegateTimeline.timelineItems - .onEach { _timelineItems.value = it } - .launchIn(this) - delegateTimeline.paginationState - .onEach { _paginationState.value = it } - .launchIn(this) - delegateTimeline.membershipChangeEventReceived - .onEach { membershipChangeEventReceived.emit(it) } - .launchIn(this) - - launch { - withContext(NonCancellable) { - closeSignal.await() - Timber.d("Close delegate") - delegateTimeline.close() - } - } - } - } - - override val paginationState: StateFlow = _paginationState - override val timelineItems: Flow> = _timelineItems - - override suspend fun paginateBackwards(requestSize: Int): Result { - return timeline.await().paginateBackwards(requestSize) - } - - override suspend fun paginateBackwards(requestSize: Int, untilNumberOfItems: Int): Result { - return timeline.await().paginateBackwards(requestSize, untilNumberOfItems) - } - - override suspend fun fetchDetailsForEvent(eventId: EventId): Result { - return timeline.await().fetchDetailsForEvent(eventId) - } - - override suspend fun sendReadReceipt(eventId: EventId, receiptType: ReceiptType): Result { - return timeline.await().sendReadReceipt(eventId, receiptType) - } - - override fun close() { - closeSignal.complete(Unit) - } -} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustDetachedTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustDetachedTimeline.kt new file mode 100644 index 0000000000..5d45f5d44f --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustDetachedTimeline.kt @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.timeline + +class RustDetachedTimeline { +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustLiveTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustLiveTimeline.kt new file mode 100644 index 0000000000..5ff770b053 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustLiveTimeline.kt @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.timeline + +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.timeline.LiveTimeline +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.ReceiptType +import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.matrix.api.timeline.TimelineException +import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessageMapper +import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper +import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper +import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper +import io.element.android.libraries.matrix.impl.timeline.postprocessor.LoadingIndicatorsPostProcessor +import io.element.android.libraries.matrix.impl.timeline.postprocessor.RoomBeginningPostProcessor +import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor +import io.element.android.services.toolbox.api.systemclock.SystemClock +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.ensureActive +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.matrix.rustcomponents.sdk.TimelineDiff +import org.matrix.rustcomponents.sdk.TimelineItem +import timber.log.Timber +import uniffi.matrix_sdk_ui.EventItemOrigin +import java.util.Date +import java.util.concurrent.atomic.AtomicBoolean +import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline + +private const val INITIAL_MAX_SIZE = 50 + +class RustLiveTimeline( + private val inner: InnerTimeline, + private val systemClock: SystemClock, + private val roomCoroutineScope: CoroutineScope, + private val isKeyBackupEnabled: Boolean, + private val matrixRoom: MatrixRoom, + private val dispatcher: CoroutineDispatcher, + private val lastLoginTimestamp: Date?, + private val fetchDetailsForEvent: suspend (EventId) -> Result, + private val onNewSyncedEvent: () -> Unit, +) : LiveTimeline { + + private val initLatch = CompletableDeferred() + private val isInit = AtomicBoolean(false) + + private val _timelineItems: MutableStateFlow> = + MutableStateFlow(emptyList()) + + private val encryptedHistoryPostProcessor = TimelineEncryptedHistoryPostProcessor( + lastLoginTimestamp = lastLoginTimestamp, + isRoomEncrypted = matrixRoom.isEncrypted, + isKeyBackupEnabled = isKeyBackupEnabled, + dispatcher = dispatcher, + ) + + private val roomBeginningPostProcessor = RoomBeginningPostProcessor() + private val loadingIndicatorsPostProcessor = LoadingIndicatorsPostProcessor(systemClock) + + private val timelineItemFactory = MatrixTimelineItemMapper( + fetchDetailsForEvent = fetchDetailsForEvent, + roomCoroutineScope = roomCoroutineScope, + virtualTimelineItemMapper = VirtualTimelineItemMapper(), + eventTimelineItemMapper = EventTimelineItemMapper( + contentMapper = TimelineEventContentMapper( + eventMessageMapper = EventMessageMapper() + ) + ) + ) + + private val timelineDiffProcessor = MatrixTimelineDiffProcessor( + timelineItems = _timelineItems, + timelineItemFactory = timelineItemFactory, + ) + + init { + roomCoroutineScope.launch(dispatcher) { + inner.timelineDiffFlow { initialList -> + postItems(initialList) + }.onEach { diffs -> + if (diffs.any { diff -> diff.eventOrigin() == EventItemOrigin.SYNC }) { + onNewSyncedEvent() + } + postDiffs(diffs) + }.launchIn(this) + + launch { + fetchMembers() + } + } + } + + override val membershipChangeEventReceived: Flow = timelineDiffProcessor.membershipChangeEventReceived + + override suspend fun sendReadReceipt(eventId: EventId, receiptType: ReceiptType): Result { + return runCatching { + inner.sendReadReceipt(receiptType.toRustReceiptType(), eventId.value) + } + } + + override suspend fun paginateBackwards(): Result { + initLatch.await() + return runCatching { + if (!canBackPaginate()) throw TimelineException.CannotPaginate + inner.paginateBackwards() + }.onFailure { error -> + if (error is TimelineException.CannotPaginate) { + Timber.d("Can't paginate backwards on room ${matrixRoom.roomId} with backPaginationStatus: ${backPaginationStatus.value}") + } else { + Timber.e(error, "Error paginating backwards on room ${matrixRoom.roomId}") + } + }.onSuccess { + Timber.v("Success back paginating for room ${matrixRoom.roomId}") + } + } + + private fun canBackPaginate(): Boolean { + return isInit.get() && backPaginationStatus.value.canPaginate + } + + override val backPaginationStatus: StateFlow = inner + .backPaginationStatusFlow() + .map() + .stateIn(roomCoroutineScope, SharingStarted.Eagerly, Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = true)) + + override val timelineItems: Flow> = combine( + _timelineItems, + backPaginationStatus.map { it.hasMoreToLoad }.distinctUntilChanged() + ) { timelineItems, hasMoreToLoadBackward -> + timelineItems + .let { items -> encryptedHistoryPostProcessor.process(items) } + .let { items -> + roomBeginningPostProcessor.process( + items = items, + isDm = matrixRoom.isDm, + hasMoreToLoadBackwards = hasMoreToLoadBackward + ) + }.let {items -> loadingIndicatorsPostProcessor.process(items, hasMoreToLoadBackward)} + + } + + override fun close() { + inner.close() + } + + private suspend fun fetchMembers() = withContext(dispatcher) { + initLatch.await() + try { + inner.fetchMembers() + } catch (exception: Exception) { + Timber.e(exception, "Error fetching members for room ${matrixRoom.roomId}") + } + } + + private suspend fun postItems(items: List) = coroutineScope { + // Split the initial items in multiple list as there is no pagination in the cached data, so we can post timelineItems asap. + items.chunked(INITIAL_MAX_SIZE).reversed().forEach { + ensureActive() + timelineDiffProcessor.postItems(it) + } + isInit.set(true) + initLatch.complete(Unit) + } + + private suspend fun postDiffs(diffs: List) { + initLatch.await() + timelineDiffProcessor.postDiffs(diffs) + } +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt index b507690a4a..b6f4284bc8 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt @@ -18,16 +18,14 @@ package io.element.android.libraries.matrix.impl.timeline import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.TimelineException -import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessageMapper import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper -import io.element.android.libraries.matrix.impl.timeline.postprocessor.DmBeginningTimelineProcessor +import io.element.android.libraries.matrix.impl.timeline.postprocessor.RoomBeginningPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineDispatcher @@ -39,7 +37,6 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.onEach @@ -50,224 +47,9 @@ import org.matrix.rustcomponents.sdk.Timeline import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineItem import timber.log.Timber -import uniffi.matrix_sdk_ui.BackPaginationStatus import uniffi.matrix_sdk_ui.EventItemOrigin import java.util.Date import java.util.concurrent.atomic.AtomicBoolean private const val INITIAL_MAX_SIZE = 50 -class RustMatrixTimeline( - roomCoroutineScope: CoroutineScope, - isKeyBackupEnabled: Boolean, - private val matrixRoom: MatrixRoom, - private val innerTimeline: Timeline, - private val dispatcher: CoroutineDispatcher, - lastLoginTimestamp: Date?, - private val onNewSyncedEvent: () -> Unit, -) : MatrixTimeline { - private val initLatch = CompletableDeferred() - private val isInit = AtomicBoolean(false) - - private val _timelineItems: MutableStateFlow> = - MutableStateFlow(emptyList()) - - private val _paginationState = MutableStateFlow( - MatrixTimeline.PaginationState.Initial - ) - - private val encryptedHistoryPostProcessor = TimelineEncryptedHistoryPostProcessor( - lastLoginTimestamp = lastLoginTimestamp, - isRoomEncrypted = matrixRoom.isEncrypted, - isKeyBackupEnabled = isKeyBackupEnabled, - dispatcher = dispatcher, - ) - - private val dmBeginningTimelineProcessor = DmBeginningTimelineProcessor() - - private val timelineItemFactory = MatrixTimelineItemMapper( - fetchDetailsForEvent = this::fetchDetailsForEvent, - roomCoroutineScope = roomCoroutineScope, - virtualTimelineItemMapper = VirtualTimelineItemMapper(), - eventTimelineItemMapper = EventTimelineItemMapper( - contentMapper = TimelineEventContentMapper( - eventMessageMapper = EventMessageMapper() - ) - ) - ) - - private val timelineDiffProcessor = MatrixTimelineDiffProcessor( - timelineItems = _timelineItems, - timelineItemFactory = timelineItemFactory, - ) - - override val paginationState: StateFlow = _paginationState.asStateFlow() - - @OptIn(ExperimentalCoroutinesApi::class) - override val timelineItems: Flow> = _timelineItems - .mapLatest { items -> encryptedHistoryPostProcessor.process(items) } - .mapLatest { items -> - dmBeginningTimelineProcessor.process( - items = items, - isDm = matrixRoom.isDirect && matrixRoom.isOneToOne, - isAtStartOfTimeline = paginationState.value.beginningOfRoomReached - ) - } - - override val membershipChangeEventReceived: Flow = timelineDiffProcessor.membershipChangeEventReceived - - init { - Timber.d("Initialize timeline for room ${matrixRoom.roomId}") - - roomCoroutineScope.launch(dispatcher) { - innerTimeline.timelineDiffFlow { initialList -> - postItems(initialList) - }.onEach { diffs -> - if (diffs.any { diff -> diff.eventOrigin() == EventItemOrigin.SYNC }) { - onNewSyncedEvent() - } - postDiffs(diffs) - }.launchIn(this) - - paginationStateFlow() - .onEach { - _paginationState.value = it - } - .launchIn(this) - - fetchMembers() - } - } - - private fun paginationStateFlow(): Flow { - return combine( - innerTimeline.backPaginationStatusFlow(), - timelineItems, - ) { paginationStatus, filteredItems -> - if (filteredItems.hasEncryptionHistoryBanner()) { - return@combine MatrixTimeline.PaginationState( - isBackPaginating = false, - hasMoreToLoadBackwards = false, - beginningOfRoomReached = false, - ) - } - when (paginationStatus) { - BackPaginationStatus.IDLE -> { - MatrixTimeline.PaginationState( - isBackPaginating = false, - hasMoreToLoadBackwards = true, - beginningOfRoomReached = false, - ) - } - BackPaginationStatus.PAGINATING -> { - MatrixTimeline.PaginationState( - isBackPaginating = true, - hasMoreToLoadBackwards = true, - beginningOfRoomReached = false, - ) - } - BackPaginationStatus.TIMELINE_START_REACHED -> { - MatrixTimeline.PaginationState( - isBackPaginating = false, - hasMoreToLoadBackwards = false, - beginningOfRoomReached = true, - ) - } - } - } - } - - private suspend fun fetchMembers() = withContext(dispatcher) { - initLatch.await() - try { - innerTimeline.fetchMembers() - } catch (exception: Exception) { - Timber.e(exception, "Error fetching members for room ${matrixRoom.roomId}") - } - } - - private suspend fun postItems(items: List) = coroutineScope { - // Split the initial items in multiple list as there is no pagination in the cached data, so we can post timelineItems asap. - items.chunked(INITIAL_MAX_SIZE).reversed().forEach { - ensureActive() - timelineDiffProcessor.postItems(it) - } - isInit.set(true) - initLatch.complete(Unit) - } - - private suspend fun postDiffs(diffs: List) { - initLatch.await() - timelineDiffProcessor.postDiffs(diffs) - } - - override suspend fun fetchDetailsForEvent(eventId: EventId): Result = withContext(dispatcher) { - runCatching { - innerTimeline.fetchDetailsForEvent(eventId.value) - } - } - - override suspend fun paginateBackwards(requestSize: Int): Result { - val paginationOptions = PaginationOptions.SimpleRequest( - eventLimit = requestSize.toUShort(), - waitForToken = true, - ) - return paginateBackwards(paginationOptions) - } - - override suspend fun paginateBackwards(requestSize: Int, untilNumberOfItems: Int): Result { - val paginationOptions = PaginationOptions.UntilNumItems( - eventLimit = requestSize.toUShort(), - items = untilNumberOfItems.toUShort(), - waitForToken = true, - ) - return paginateBackwards(paginationOptions) - } - - private suspend fun paginateBackwards(paginationOptions: PaginationOptions): Result = withContext(dispatcher) { - initLatch.await() - runCatching { - if (!canBackPaginate()) throw TimelineException.CannotPaginate - Timber.v("Start back paginating for room ${matrixRoom.roomId} ") - innerTimeline.paginateBackwards(paginationOptions) - }.onFailure { error -> - if (error is TimelineException.CannotPaginate) { - Timber.d("Can't paginate backwards on room ${matrixRoom.roomId}, we're already at the start") - } else { - Timber.e(error, "Error paginating backwards on room ${matrixRoom.roomId}") - } - }.onSuccess { - Timber.v("Success back paginating for room ${matrixRoom.roomId}") - } - } - - private fun canBackPaginate(): Boolean { - return isInit.get() && paginationState.value.canBackPaginate - } - - override suspend fun sendReadReceipt( - eventId: EventId, - receiptType: ReceiptType, - ) = withContext(dispatcher) { - runCatching { - innerTimeline.sendReadReceipt( - receiptType = receiptType.toRustReceiptType(), - eventId = eventId.value, - ) - } - } - - override fun close() { - innerTimeline.close() - } - - fun getItemById(eventId: EventId): MatrixTimelineItem.Event? { - return _timelineItems.value.firstOrNull { (it as? MatrixTimelineItem.Event)?.eventId == eventId } as? MatrixTimelineItem.Event - } - - private fun List.hasEncryptionHistoryBanner(): Boolean { - val firstItem = firstOrNull() - return firstItem is MatrixTimelineItem.Virtual && - firstItem.virtual is VirtualTimelineItem.EncryptedHistoryBanner - } -} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineFlows.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineFlows.kt new file mode 100644 index 0000000000..482489a517 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineFlows.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.timeline + +import io.element.android.libraries.matrix.api.timeline.Timeline +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import uniffi.matrix_sdk_ui.PaginationStatus + +fun Flow.map(): Flow = map { paginationStatus -> + when (paginationStatus) { + PaginationStatus.IDLE -> Timeline.PaginationStatus( + isPaginating = false, + hasMoreToLoad = true + ) + PaginationStatus.PAGINATING -> Timeline.PaginationStatus( + isPaginating = true, + hasMoreToLoad = true + ) + PaginationStatus.TIMELINE_END_REACHED -> Timeline.PaginationStatus( + isPaginating = false, + hasMoreToLoad = false + ) + } +} + diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt new file mode 100644 index 0000000000..882d89bbee --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.timeline.postprocessor + +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem + +fun List.hasEncryptionHistoryBanner(): Boolean { + val firstItem = firstOrNull() + return firstItem is MatrixTimelineItem.Virtual && + firstItem.virtual is VirtualTimelineItem.EncryptedHistoryBanner +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt new file mode 100644 index 0000000000..2d08c8e5b8 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.timeline.postprocessor + +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem +import io.element.android.services.toolbox.api.systemclock.SystemClock + +class LoadingIndicatorsPostProcessor(private val systemClock: SystemClock) { + + fun process( + items: List, + hasMoreToLoadBackwards: Boolean, + ): List { + return if (hasMoreToLoadBackwards && !items.hasEncryptionHistoryBanner()){ + listOf( + MatrixTimelineItem.Virtual( + uniqueId = "BackwardLoadingIndicator", + virtual = VirtualTimelineItem.LoadingIndicator( + backwards = true, + timestamp = systemClock.epochMillis() + ) + ) + ) + items + }else { + items + } + } + +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt similarity index 73% rename from libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessor.kt rename to libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt index f36b4a78b8..fed2266659 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt @@ -21,17 +21,36 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MembershipCha import io.element.android.libraries.matrix.api.timeline.item.event.OtherState import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent import io.element.android.libraries.matrix.api.timeline.item.event.StateContent +import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem /** - * This timeline post-processor removes the room creation event and the self-join event from the timeline for DMs. + * This timeline post-processor removes the room creation event and the self-join event from the timeline for DMs + * or add the RoomBeginning item for non DM room. */ -class DmBeginningTimelineProcessor { +class RoomBeginningPostProcessor { + fun process( items: List, isDm: Boolean, - isAtStartOfTimeline: Boolean + hasMoreToLoadBackwards: Boolean ): List { - if (!isDm || !isAtStartOfTimeline) return items + return when { + hasMoreToLoadBackwards -> items + isDm -> processForDM(items) + else -> processForRoom(items) + } + } + + private fun processForRoom(items: List): List { + if (items.hasEncryptionHistoryBanner()) return items + val roomBeginningItem = MatrixTimelineItem.Virtual( + uniqueId = VirtualTimelineItem.RoomBeginning.toString(), + virtual = VirtualTimelineItem.RoomBeginning + ) + return listOf(roomBeginningItem) + items + } + + private fun processForDM(items: List): List { // Find room creation event. This is usually index 0 val roomCreationEventIndex = items.indexOfFirst { diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessorTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessorTest.kt index fc24f54c14..40a15f7621 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessorTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessorTest.kt @@ -35,8 +35,8 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.create", anEventTimelineItem(sender = A_USER_ID, content = StateContent("", OtherState.RoomCreate))), MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, MembershipChange.JOINED))), ) - val processor = DmBeginningTimelineProcessor() - val processedItems = processor.process(timelineItems, isDm = true, isAtStartOfTimeline = true) + val processor = RoomBeginningPostProcessor() + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = true) assertThat(processedItems).isEmpty() } @@ -52,8 +52,8 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.member_other", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID_2, MembershipChange.JOINED))), MatrixTimelineItem.Event("m.room.message", anEventTimelineItem(content = aMessageContent("hi"))), ) - val processor = DmBeginningTimelineProcessor() - val processedItems = processor.process(timelineItems, isDm = true, isAtStartOfTimeline = true) + val processor = RoomBeginningPostProcessor() + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = true) assertThat(processedItems).isEqualTo(expected) } @@ -63,8 +63,8 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.create", anEventTimelineItem(sender = A_USER_ID, content = StateContent("", OtherState.RoomCreate))), MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, MembershipChange.JOINED))), ) - val processor = DmBeginningTimelineProcessor() - val processedItems = processor.process(timelineItems, isDm = false, isAtStartOfTimeline = true) + val processor = RoomBeginningPostProcessor() + val processedItems = processor.process(timelineItems, isDm = false, hasMoreToLoadBackwards = true) assertThat(processedItems).isEqualTo(timelineItems) } @@ -74,8 +74,8 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.create", anEventTimelineItem(sender = A_USER_ID, content = StateContent("", OtherState.RoomCreate))), MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, MembershipChange.JOINED))), ) - val processor = DmBeginningTimelineProcessor() - val processedItems = processor.process(timelineItems, isDm = true, isAtStartOfTimeline = false) + val processor = RoomBeginningPostProcessor() + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = false) assertThat(processedItems).isEqualTo(timelineItems) } @@ -84,8 +84,8 @@ class DmBeginningTimelineProcessorTest { val timelineItems = listOf( MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, MembershipChange.JOINED))), ) - val processor = DmBeginningTimelineProcessor() - val processedItems = processor.process(timelineItems, isDm = true, isAtStartOfTimeline = false) + val processor = RoomBeginningPostProcessor() + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = false) assertThat(processedItems).isEqualTo(timelineItems) } @@ -95,8 +95,8 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.create", anEventTimelineItem(sender = A_USER_ID, content = StateContent("", OtherState.RoomCreate))), MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID_2, MembershipChange.JOINED))), ) - val processor = DmBeginningTimelineProcessor() - val processedItems = processor.process(timelineItems, isDm = true, isAtStartOfTimeline = false) + val processor = RoomBeginningPostProcessor() + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = false) assertThat(processedItems).isEqualTo(timelineItems) } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index 5938cd300b..c8dad4ad8a 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -42,7 +42,6 @@ import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeMatrixTimeline.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeMatrixTimeline.kt index f9ab698b8e..f98e8d0fcb 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeMatrixTimeline.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeMatrixTimeline.kt @@ -17,7 +17,6 @@ package io.element.android.libraries.matrix.test.timeline import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.timeline.MatrixTimeline import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.tests.testutils.simulateLongTask From 90e273cd659054fb953d0c25655f8b994a266e5e Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 17 Apr 2024 22:02:44 +0200 Subject: [PATCH 025/289] Room list invites: address some remarks and add small tests --- .../joinroom/impl/JoinRoomPresenter.kt | 2 +- .../roomlist/impl/RoomListPresenter.kt | 4 ++-- .../datasource/RoomListRoomSummaryFactory.kt | 2 ++ .../impl/model/RoomListRoomSummary.kt | 1 + .../impl/model/RoomListRoomSummaryProvider.kt | 21 +++++++++++++------ .../RoomListFiltersEmptyStateResourcesTest.kt | 9 ++++++++ .../impl/model/RoomListRoomSummaryTest.kt | 1 + .../matrix/api/roomlist/RoomListFilter.kt | 2 +- .../impl/roomlist/RoomListFilterTests.kt | 15 ++++++++++++- 9 files changed, 46 insertions(+), 11 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 5b3225575f..bdef36d6a8 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -16,6 +16,7 @@ package io.element.android.features.joinroom.impl +import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -31,7 +32,6 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo -import org.jetbrains.annotations.VisibleForTesting import java.util.Optional class JoinRoomPresenter @AssistedInject constructor( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index edd237f56b..c455cdff17 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -16,6 +16,7 @@ package io.element.android.features.roomlist.impl +import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState @@ -74,7 +75,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.takeWhile import kotlinx.coroutines.launch -import org.jetbrains.annotations.VisibleForTesting import javax.inject.Inject private const val EXTENDED_RANGE_SIZE = 40 @@ -225,7 +225,7 @@ class RoomListPresenter @Inject constructor( val initialState = RoomListState.ContextMenu.Shown( roomId = event.roomListRoomSummary.roomId, roomName = event.roomListRoomSummary.name, - isDm = event.roomListRoomSummary.isDirect, + isDm = event.roomListRoomSummary.isDm, isFavorite = event.roomListRoomSummary.isFavorite, markAsUnreadFeatureFlagEnabled = featureFlagService.isFeatureEnabled(FeatureFlags.MarkAsUnread), hasNewContent = event.roomListRoomSummary.hasNewContent diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt index af631c3181..541d3a265c 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt @@ -52,6 +52,7 @@ class RoomListRoomSummaryFactory @Inject constructor( isDirect = false, isFavorite = false, inviteSender = null, + isDm = false, canonicalAlias = null, ) } @@ -94,6 +95,7 @@ class RoomListRoomSummaryFactory @Inject constructor( ), ) }, + isDm = roomSummary.details.isDm, canonicalAlias = roomSummary.details.canonicalAlias, displayType = if (roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED) { RoomSummaryDisplayType.INVITE diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index 607303f84c..4f37cd0ae6 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -38,6 +38,7 @@ data class RoomListRoomSummary( val userDefinedNotificationMode: RoomNotificationMode?, val hasRoomCall: Boolean, val isDirect: Boolean, + val isDm: Boolean, val isFavorite: Boolean, val inviteSender: InviteSender?, ) { diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 68abb742dd..f44a857042 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -84,20 +84,18 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider Date: Wed, 17 Apr 2024 21:06:06 +0000 Subject: [PATCH 026/289] Update core to v1.13.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6ab79bb7aa..f5c798d3df 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ ksp = "1.9.23-1.0.20" firebaseAppDistribution = "4.2.0" # AndroidX -core = "1.12.0" +core = "1.13.0" datastore = "1.0.0" constraintlayout = "2.1.4" constraintlayout_compose = "1.0.1" From 37fa6548c410cbd8a76758b3c6a2b2ac379e2370 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 15 Apr 2024 20:09:09 +0200 Subject: [PATCH 027/289] Add MatrixClient.resolveRoomAlias method. --- .../io/element/android/libraries/matrix/api/MatrixClient.kt | 1 + .../android/libraries/matrix/impl/RustMatrixClient.kt | 6 ++++++ .../android/libraries/matrix/test/FakeMatrixClient.kt | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index 24a034c070..bf3d75edf6 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -98,4 +98,5 @@ interface MatrixClient : Closeable { suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result suspend fun getRecentlyVisitedRooms(): Result> + suspend fun resolveRoomAlias(roomAlias: String): Result } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 8a3ff31c62..81e403a65e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -460,6 +460,12 @@ class RustMatrixClient( } } + override suspend fun resolveRoomAlias(roomAlias: String): Result = withContext(sessionDispatcher) { + runCatching { + client.resolveRoomAlias(roomAlias).let(::RoomId) + } + } + override fun syncService(): SyncService = rustSyncService override fun sessionVerificationService(): SessionVerificationService = verificationService diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 3feb161cb3..70e5fc97a0 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -73,6 +73,7 @@ class FakeMatrixClient( private val encryptionService: FakeEncryptionService = FakeEncryptionService(), private val roomDirectoryService: RoomDirectoryService = FakeRoomDirectoryService(), private val accountManagementUrlString: Result = Result.success(null), + private val resolveRoomAliasResult: (String) -> Result = { Result.success(A_ROOM_ID) }, ) : MatrixClient { var setDisplayNameCalled: Boolean = false private set @@ -276,6 +277,10 @@ class FakeMatrixClient( return Result.success(Unit) } + override suspend fun resolveRoomAlias(roomAlias: String): Result { + return resolveRoomAliasResult(roomAlias) + } + override suspend fun getRecentlyVisitedRooms(): Result> { return Result.success(visitedRoomsId) } From 68346dd7824663eec9858a7449401b503a6d550f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 15 Apr 2024 20:27:06 +0200 Subject: [PATCH 028/289] Add MatrixClient.getRoomPreview method. --- .../libraries/matrix/api/MatrixClient.kt | 2 + .../matrix/api/room/preview/RoomPreview.kt | 46 +++++++++++++++++++ .../libraries/matrix/impl/RustMatrixClient.kt | 8 ++++ .../impl/room/preview/RoomPreviewMapper.kt | 40 ++++++++++++++++ .../libraries/matrix/test/FakeMatrixClient.kt | 6 +++ 5 files changed, 102 insertions(+) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index bf3d75edf6..759b6cd47c 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -30,6 +30,7 @@ import io.element.android.libraries.matrix.api.pusher.PushersService import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.sync.SyncService @@ -99,4 +100,5 @@ interface MatrixClient : Closeable { suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result suspend fun getRecentlyVisitedRooms(): Result> suspend fun resolveRoomAlias(roomAlias: String): Result + suspend fun getRoomPreview(roomIdOrAlias: String): Result } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt new file mode 100644 index 0000000000..8ee7550b74 --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.room.preview + +import io.element.android.libraries.matrix.api.core.RoomId + +data class RoomPreview( + /** The room id for this room. */ + val roomId: RoomId, + /** The canonical alias for the room. */ + val canonicalAlias: String?, + /** The room's name, if set. */ + val name: String?, + /** The room's topic, if set. */ + val topic: String?, + /** The MXC URI to the room's avatar, if set. */ + val avatarUrl: String?, + /** The number of joined members. */ + val numberOfJoinedMembers: Long, + /** The room type (space, custom) or nothing, if it's a regular room. */ + val roomType: String?, + /** Is the history world-readable for this room? */ + val isHistoryWorldReadable: Boolean, + /** Is the room joined by the current user? */ + val isJoined: Boolean, + /** Is the current user invited to this room? */ + val isInvited: Boolean, + /** is the join rule public for this room? */ + val isPublic: Boolean, + /** Can we knock (or restricted-knock) to this room? */ + val canKnock: Boolean, +) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 81e403a65e..cd7100f667 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -37,6 +37,7 @@ import io.element.android.libraries.matrix.api.pusher.PushersService import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.awaitLoaded @@ -58,6 +59,7 @@ import io.element.android.libraries.matrix.impl.room.RoomContentForwarder import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber import io.element.android.libraries.matrix.impl.room.RustMatrixRoom import io.element.android.libraries.matrix.impl.room.map +import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper import io.element.android.libraries.matrix.impl.roomdirectory.RustRoomDirectoryService import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService @@ -466,6 +468,12 @@ class RustMatrixClient( } } + override suspend fun getRoomPreview(roomIdOrAlias: String): Result = withContext(sessionDispatcher) { + runCatching { + client.getRoomPreview(roomIdOrAlias).let(RoomPreviewMapper::map) + } + } + override fun syncService(): SyncService = rustSyncService override fun sessionVerificationService(): SessionVerificationService = verificationService diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt new file mode 100644 index 0000000000..fb18205978 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.room.preview + +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview + +object RoomPreviewMapper { + fun map(roomPreview: RustRoomPreview): RoomPreview { + return RoomPreview( + roomId = RoomId(roomPreview.roomId), + canonicalAlias = roomPreview.canonicalAlias, + name = roomPreview.name, + topic = roomPreview.topic, + avatarUrl = roomPreview.avatarUrl, + numberOfJoinedMembers = roomPreview.numJoinedMembers.toLong(), + roomType = roomPreview.roomType, + isHistoryWorldReadable = roomPreview.isHistoryWorldReadable, + isJoined = roomPreview.isJoined, + isInvited = roomPreview.isInvited, + isPublic = roomPreview.isPublic, + canKnock = roomPreview.canKnock + ) + } +} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 70e5fc97a0..7bb880986f 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.api.pusher.PushersService import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults @@ -74,6 +75,7 @@ class FakeMatrixClient( private val roomDirectoryService: RoomDirectoryService = FakeRoomDirectoryService(), private val accountManagementUrlString: Result = Result.success(null), private val resolveRoomAliasResult: (String) -> Result = { Result.success(A_ROOM_ID) }, + private val getRoomPreviewResult: (String) -> Result = { TODO("Not implemented") }, ) : MatrixClient { var setDisplayNameCalled: Boolean = false private set @@ -281,6 +283,10 @@ class FakeMatrixClient( return resolveRoomAliasResult(roomAlias) } + override suspend fun getRoomPreview(roomIdOrAlias: String): Result { + return getRoomPreviewResult(roomIdOrAlias) + } + override suspend fun getRecentlyVisitedRooms(): Result> { return Result.success(visitedRoomsId) } From 2a467bd49bc159d33d82a5d0f7fb69a19c6b131c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 10:21:26 +0200 Subject: [PATCH 029/289] Handle permalink navigation - WIP - prepare navigating to an Event - add NodeBuilder to MessagesEntryPoint --- .../android/appnav/LoggedInFlowNode.kt | 37 ++++++++++++++++++- .../android/appnav/room/RoomFlowNode.kt | 2 +- .../appnav/room/RoomNavigationTarget.kt | 17 +++++++-- .../appnav/room/joined/JoinedRoomFlowNode.kt | 2 +- .../room/joined/JoinedRoomLoadedFlowNode.kt | 22 ++++++++--- .../appnav/JoinRoomLoadedFlowNodeTest.kt | 30 +++++++++++---- .../joinroom/impl/JoinRoomPresenter.kt | 31 +++++++++++++++- .../messages/api/MessagesEntryPoint.kt | 19 +++++++--- .../impl/DefaultMessagesEntryPoint.kt | 25 ++++++++++--- .../messages/impl/MessagesFlowNode.kt | 19 ++++++++-- .../features/messages/impl/MessagesNode.kt | 25 +++++++++---- 11 files changed, 186 insertions(+), 43 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 1bde7c5b28..190623c9b6 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -66,6 +66,7 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.MAIN_SPACE import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.services.appnavstate.api.AppNavigationStateService import kotlinx.coroutines.CoroutineScope @@ -191,7 +192,7 @@ class LoggedInFlowNode @AssistedInject constructor( data class Room( val roomId: RoomId, val roomDescription: RoomDescription? = null, - val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages + val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(null) ) : NavTarget @Parcelize @@ -270,6 +271,40 @@ class LoggedInFlowNode @AssistedInject constructor( coroutineScope.launch { attachRoom(roomId) } } + override fun onPermalinkClicked(data: PermalinkData) { + coroutineScope.launch { + when (data) { + is PermalinkData.UserLink -> { + // FIXME: Add a user profile screen. + Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") + } + is PermalinkData.RoomIdLink -> { + backstack.push(NavTarget.Room(data.roomId)) + } + is PermalinkData.RoomAliasLink -> { + // FIXME Implement room alias navigation + Timber.e("Room alias link clicked: ${data.roomAlias}. TODO Handle a room alias navigation") + } + is PermalinkData.EventIdAliasLink -> { + // FIXME Implement event alias navigation + Timber.e("Event with room alias link clicked: ${data.eventId}. TODO Handle an event with room alias navigation") + } + is PermalinkData.EventIdLink -> { + backstack.push( + NavTarget.Room( + data.roomId, + initialElement = RoomNavigationTarget.Messages(data.eventId) + ) + ) + } + is PermalinkData.FallbackLink, + is PermalinkData.RoomEmailInviteLink -> { + // Should not happen (handled by MessagesNode) + } + } + } + } + override fun onOpenGlobalNotificationSettings() { backstack.push(NavTarget.Settings(PreferencesEntryPoint.InitialTarget.NotificationSettings)) } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index db3664e631..2f62045b22 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -75,7 +75,7 @@ class RoomFlowNode @AssistedInject constructor( data class Inputs( val roomId: RoomId, val roomDescription: Optional, - val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages, + val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(), ) : NodeInputs private val inputs: Inputs = inputs() diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomNavigationTarget.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomNavigationTarget.kt index 901b2667be..776171d141 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomNavigationTarget.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomNavigationTarget.kt @@ -16,8 +16,17 @@ package io.element.android.appnav.room -enum class RoomNavigationTarget { - Messages, - Details, - NotificationSettings, +import android.os.Parcelable +import io.element.android.libraries.matrix.api.core.EventId +import kotlinx.parcelize.Parcelize + +sealed interface RoomNavigationTarget : Parcelable { + @Parcelize + data class Messages(val eventId: EventId? = null) : RoomNavigationTarget + + @Parcelize + data object Details : RoomNavigationTarget + + @Parcelize + data object NotificationSettings : RoomNavigationTarget } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt index 36def888ac..ae8d03be33 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt @@ -69,7 +69,7 @@ class JoinedRoomFlowNode @AssistedInject constructor( ) { data class Inputs( val roomId: RoomId, - val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages, + val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(), ) : NodeInputs private val inputs: Inputs = inputs() diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt index a5d7893c91..7a6c736385 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt @@ -42,8 +42,10 @@ import io.element.android.libraries.architecture.inputs import io.element.android.libraries.di.DaggerComponentOwner import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.EventId 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.permalink.PermalinkData import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.services.appnavstate.api.AppNavigationStateService import kotlinx.coroutines.CoroutineScope @@ -63,8 +65,8 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( roomComponentFactory: RoomComponentFactory, ) : BaseFlowNode( backstack = BackStack( - initialElement = when (plugins.filterIsInstance(Inputs::class.java).first().initialElement) { - RoomNavigationTarget.Messages -> NavTarget.Messages + initialElement = when (val input = plugins.filterIsInstance(Inputs::class.java).first().initialElement) { + is RoomNavigationTarget.Messages -> NavTarget.Messages(input.eventId) RoomNavigationTarget.Details -> NavTarget.RoomDetails RoomNavigationTarget.NotificationSettings -> NavTarget.RoomNotificationSettings }, @@ -75,13 +77,14 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( ), DaggerComponentOwner { interface Callback : Plugin { fun onOpenRoom(roomId: RoomId) + fun onPermalinkClicked(data: PermalinkData) fun onForwardedToSingleRoom(roomId: RoomId) fun onOpenGlobalNotificationSettings() } data class Inputs( val room: MatrixRoom, - val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages, + val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(), ) : NodeInputs private val inputs: Inputs = inputs() @@ -139,7 +142,7 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { - NavTarget.Messages -> { + is NavTarget.Messages -> { val callback = object : MessagesEntryPoint.Callback { override fun onRoomDetailsClicked() { backstack.push(NavTarget.RoomDetails) @@ -149,11 +152,18 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( backstack.push(NavTarget.RoomMemberDetails(userId)) } + override fun onPermalinkClicked(data: PermalinkData) { + callbacks.forEach { it.onPermalinkClicked(data) } + } + override fun onForwardedToSingleRoom(roomId: RoomId) { callbacks.forEach { it.onForwardedToSingleRoom(roomId) } } } - messagesEntryPoint.createNode(this, buildContext, callback) + messagesEntryPoint.nodeBuilder(this, buildContext) + .params(MessagesEntryPoint.Params(navTarget.eventId)) + .callback(callback) + .build() } NavTarget.RoomDetails -> { createRoomDetailsNode(buildContext, RoomDetailsEntryPoint.InitialTarget.RoomDetails) @@ -169,7 +179,7 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( sealed interface NavTarget : Parcelable { @Parcelize - data object Messages : NavTarget + data class Messages(val eventId: EventId? = null) : NavTarget @Parcelize data object RoomDetails : NavTarget diff --git a/appnav/src/test/kotlin/io/element/android/appnav/JoinRoomLoadedFlowNodeTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/JoinRoomLoadedFlowNodeTest.kt index 08702eeb5a..2809fc95ee 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/JoinRoomLoadedFlowNodeTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/JoinRoomLoadedFlowNodeTest.kt @@ -47,14 +47,30 @@ class JoinRoomLoadedFlowNodeTest { @get:Rule val mainDispatcherRule = MainDispatcherRule() - private class FakeMessagesEntryPoint : MessagesEntryPoint { + private class FakeMessagesEntryPoint : MessagesEntryPoint, MessagesEntryPoint.NodeBuilder { + var buildContext: BuildContext? = null var nodeId: String? = null + var parameters: MessagesEntryPoint.Params? = null var callback: MessagesEntryPoint.Callback? = null - override fun createNode(parentNode: Node, buildContext: BuildContext, callback: MessagesEntryPoint.Callback): Node { - return node(buildContext) {}.also { + override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): MessagesEntryPoint.NodeBuilder { + this.buildContext = buildContext + return this + } + + override fun params(params: MessagesEntryPoint.Params): MessagesEntryPoint.NodeBuilder { + parameters = params + return this + } + + override fun callback(callback: MessagesEntryPoint.Callback): MessagesEntryPoint.NodeBuilder { + this.callback = callback + return this + } + + override fun build(): Node { + return node(buildContext!!) {}.also { nodeId = it.id - this.callback = callback } } } @@ -118,9 +134,9 @@ class JoinRoomLoadedFlowNodeTest { val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper() // THEN - assertThat(roomFlowNode.backstack.activeElement).isEqualTo(JoinedRoomLoadedFlowNode.NavTarget.Messages) - roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode.NavTarget.Messages, Lifecycle.State.CREATED) - val messagesNode = roomFlowNode.childNode(JoinedRoomLoadedFlowNode.NavTarget.Messages)!! + assertThat(roomFlowNode.backstack.activeElement).isEqualTo(JoinedRoomLoadedFlowNode.NavTarget.Messages()) + roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode.NavTarget.Messages(), Lifecycle.State.CREATED) + val messagesNode = roomFlowNode.childNode(JoinedRoomLoadedFlowNode.NavTarget.Messages())!! assertThat(messagesNode.id).isEqualTo(fakeMessagesEntryPoint.nodeId) } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index bdef36d6a8..f088603d3b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState +import androidx.compose.runtime.rememberCoroutineScope import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents @@ -32,6 +33,8 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo +import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import kotlinx.coroutines.launch import java.util.Optional class JoinRoomPresenter @AssistedInject constructor( @@ -46,6 +49,7 @@ class JoinRoomPresenter @AssistedInject constructor( @Composable override fun present(): JoinRoomState { + val coroutineScope = rememberCoroutineScope() val roomInfo by matrixClient.getRoomInfoFlow(roomId).collectAsState(initial = Optional.empty()) val contentState by produceState(initialValue = ContentState.Loading(roomId), key1 = roomInfo) { value = when { @@ -56,6 +60,12 @@ class JoinRoomPresenter @AssistedInject constructor( roomDescription.get().toContentState() } else -> { + coroutineScope.launch { + val result = matrixClient.getRoomPreview(roomId.value) + value = result.getOrNull() + ?.toContentState() + ?: ContentState.UnknownRoom(roomId) + } ContentState.Loading(roomId) } } @@ -64,7 +74,8 @@ class JoinRoomPresenter @AssistedInject constructor( fun handleEvents(event: JoinRoomEvents) { when (event) { - JoinRoomEvents.AcceptInvite, JoinRoomEvents.JoinRoom -> { + JoinRoomEvents.AcceptInvite, + JoinRoomEvents.JoinRoom -> { val inviteData = contentState.toInviteData() ?: return acceptDeclineInviteState.eventSink( AcceptDeclineInviteEvents.AcceptInvite(inviteData) @@ -87,6 +98,24 @@ class JoinRoomPresenter @AssistedInject constructor( } } +private fun RoomPreview.toContentState(): ContentState { + return ContentState.Loaded( + roomId = roomId, + name = name, + topic = topic, + alias = canonicalAlias, + numberOfMembers = numberOfJoinedMembers, + isDirect = false, + roomAvatarUrl = avatarUrl, + joinAuthorisationStatus = when { + isInvited -> JoinAuthorisationStatus.IsInvited + canKnock -> JoinAuthorisationStatus.CanKnock + isPublic -> JoinAuthorisationStatus.CanJoin + else -> JoinAuthorisationStatus.Unknown + } + ) +} + @VisibleForTesting internal fun RoomDescription.toContentState(): ContentState { return ContentState.Loaded( diff --git a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt index 482dfad8ea..9012d3a776 100644 --- a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt +++ b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt @@ -20,19 +20,28 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import io.element.android.libraries.architecture.FeatureEntryPoint +import io.element.android.libraries.matrix.api.core.EventId 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.permalink.PermalinkData interface MessagesEntryPoint : FeatureEntryPoint { - fun createNode( - parentNode: Node, - buildContext: BuildContext, - callback: Callback, - ): Node + fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder + + interface NodeBuilder { + fun params(params: Params): NodeBuilder + fun callback(callback: Callback): NodeBuilder + fun build(): Node + } + + data class Params( + val eventId: EventId?, + ) interface Callback : Plugin { fun onRoomDetailsClicked() fun onUserDataClicked(userId: UserId) + fun onPermalinkClicked(data: PermalinkData) fun onForwardedToSingleRoom(roomId: RoomId) } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt index abf451b4b6..b45c7fc6b5 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt @@ -18,6 +18,7 @@ package io.element.android.features.messages.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin import com.squareup.anvil.annotations.ContributesBinding import io.element.android.features.messages.api.MessagesEntryPoint import io.element.android.libraries.architecture.createNode @@ -26,11 +27,23 @@ import javax.inject.Inject @ContributesBinding(AppScope::class) class DefaultMessagesEntryPoint @Inject constructor() : MessagesEntryPoint { - override fun createNode( - parentNode: Node, - buildContext: BuildContext, - callback: MessagesEntryPoint.Callback - ): Node { - return parentNode.createNode(buildContext, listOf(callback)) + override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): MessagesEntryPoint.NodeBuilder { + val plugins = ArrayList() + + return object : MessagesEntryPoint.NodeBuilder { + override fun params(params: MessagesEntryPoint.Params): MessagesEntryPoint.NodeBuilder { + plugins += MessagesNode.Inputs(eventId = params.eventId) + return this + } + + override fun callback(callback: MessagesEntryPoint.Callback): MessagesEntryPoint.NodeBuilder { + plugins += callback + return this + } + + override fun build(): Node { + return parentNode.createNode(buildContext, plugins) + } + } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt index 3cf480f7d1..c8a0a753c4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt @@ -52,6 +52,7 @@ import io.element.android.features.poll.api.create.CreatePollEntryPoint import io.element.android.features.poll.api.create.CreatePollMode import io.element.android.libraries.architecture.BackstackWithOverlayBox import io.element.android.libraries.architecture.BaseFlowNode +import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.overlay.Overlay import io.element.android.libraries.architecture.overlay.operation.show @@ -62,6 +63,7 @@ import io.element.android.libraries.matrix.api.core.EventId 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.media.MediaSource +import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.mediaviewer.api.local.MediaInfo import io.element.android.libraries.mediaviewer.api.viewer.MediaViewerNode @@ -79,7 +81,7 @@ class MessagesFlowNode @AssistedInject constructor( private val createPollEntryPoint: CreatePollEntryPoint, ) : BaseFlowNode( backstack = BackStack( - initialElement = NavTarget.Messages, + initialElement = NavTarget.Messages(plugins.filterIsInstance().firstOrNull()?.eventId), savedStateMap = buildContext.savedStateMap, ), overlay = Overlay( @@ -88,12 +90,16 @@ class MessagesFlowNode @AssistedInject constructor( buildContext = buildContext, plugins = plugins ) { + data class Inputs(val eventId: EventId?) : NodeInputs + sealed interface NavTarget : Parcelable { @Parcelize data object Empty : NavTarget @Parcelize - data object Messages : NavTarget + data class Messages( + val eventId: EventId? = null, + ) : NavTarget @Parcelize data class MediaViewer( @@ -149,6 +155,10 @@ class MessagesFlowNode @AssistedInject constructor( callback?.onUserDataClicked(userId) } + override fun onPermalinkClicked(data: PermalinkData) { + callback?.onPermalinkClicked(data) + } + override fun onShowEventDebugInfoClicked(eventId: EventId?, debugInfo: TimelineItemDebugInfo) { backstack.push(NavTarget.EventDebugInfo(eventId, debugInfo)) } @@ -181,7 +191,10 @@ class MessagesFlowNode @AssistedInject constructor( ElementCallActivity.start(context, inputs) } } - createNode(buildContext, listOf(callback)) + val params = MessagesNode.Inputs( + eventId = navTarget.eventId, + ) + createNode(buildContext, listOf(callback, params)) } is NavTarget.MediaViewer -> { val inputs = MediaViewerNode.Inputs( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index ff8c727f9c..0a4d1f039d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -34,6 +34,7 @@ import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPr import io.element.android.features.messages.impl.timeline.di.TimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.androidutils.system.openUrlInExternalApp +import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId @@ -42,6 +43,7 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.mediaplayer.api.MediaPlayer import io.element.android.services.analytics.api.AnalyticsService @@ -62,11 +64,15 @@ class MessagesNode @AssistedInject constructor( private val presenter = presenterFactory.create(this) private val callback = plugins().firstOrNull() + // TODO Handle navigation to the Event + data class Inputs(val eventId: EventId?) : NodeInputs + interface Callback : Plugin { fun onRoomDetailsClicked() fun onEventClicked(event: TimelineItem.Event): Boolean fun onPreviewAttachments(attachments: ImmutableList) fun onUserDataClicked(userId: UserId) + fun onPermalinkClicked(data: PermalinkData) fun onShowEventDebugInfoClicked(eventId: EventId?, debugInfo: TimelineItemDebugInfo) fun onForwardEventClicked(eventId: EventId) fun onReportMessage(eventId: EventId, senderId: UserId) @@ -109,16 +115,19 @@ class MessagesNode @AssistedInject constructor( ) { when (val permalink = permalinkParser.parse(url)) { is PermalinkData.UserLink -> { - callback?.onUserDataClicked(permalink.userId) - } - is PermalinkData.RoomLink -> { - // TODO Implement room link handling - } - is PermalinkData.EventIdAliasLink -> { - // TODO Implement room and Event link handling + if (permalink.userId in room.membersStateFlow.value.roomMembers().orEmpty().map { it.userId }) { + // Open the room member profile + callback?.onUserDataClicked(permalink.userId) + } else { + // The user is not a member of the room + callback?.onPermalinkClicked(permalink) + } } + is PermalinkData.RoomIdLink, + is PermalinkData.RoomAliasLink, + is PermalinkData.EventIdAliasLink, is PermalinkData.EventIdLink -> { - // TODO Implement room and Event link handling + callback?.onPermalinkClicked(permalink) } is PermalinkData.FallbackLink, is PermalinkData.RoomEmailInviteLink -> { From bd12ff737b08c2e02e94df4da52a16928d1b95d3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 10:39:45 +0200 Subject: [PATCH 030/289] Introduce value class RoomAlias --- .../libraries/matrix/api/MatrixClient.kt | 3 +- .../libraries/matrix/api/core/RoomAlias.kt | 31 +++++++++++++++++++ .../matrix/api/permalink/PermalinkData.kt | 5 +-- .../libraries/matrix/impl/RustMatrixClient.kt | 5 +-- .../impl/permalink/DefaultPermalinkParser.kt | 5 +-- .../libraries/matrix/test/FakeMatrixClient.kt | 5 +-- .../mentions/MentionSpanProvider.kt | 3 +- .../impl/mentions/MentionSpanProviderTest.kt | 5 +-- 8 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomAlias.kt diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index 759b6cd47c..c79edd8465 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -17,6 +17,7 @@ package io.element.android.libraries.matrix.api import io.element.android.libraries.matrix.api.core.ProgressCallback +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.core.SessionId import io.element.android.libraries.matrix.api.core.UserId @@ -99,6 +100,6 @@ interface MatrixClient : Closeable { suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result suspend fun getRecentlyVisitedRooms(): Result> - suspend fun resolveRoomAlias(roomAlias: String): Result + suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result suspend fun getRoomPreview(roomIdOrAlias: String): Result } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomAlias.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomAlias.kt new file mode 100644 index 0000000000..46a457aa30 --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomAlias.kt @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.core + +import io.element.android.libraries.androidutils.metadata.isInDebug +import java.io.Serializable + +@JvmInline +value class RoomAlias(val value: String) : Serializable { + init { + if (isInDebug && !MatrixPatterns.isRoomAlias(value)) { + error("`$value` is not a valid room alias.\n Example room alias: `#room_alias:domain`.") + } + } + + override fun toString(): String = value +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt index d09394e8dd..fff7e22380 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt @@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.api.permalink import android.net.Uri import androidx.compose.runtime.Immutable import io.element.android.libraries.matrix.api.core.EventId +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.core.UserId import kotlinx.collections.immutable.ImmutableList @@ -39,7 +40,7 @@ sealed interface PermalinkData { ) : RoomLink data class RoomAliasLink( - val roomAlias: String, + val roomAlias: RoomAlias, override val viaParameters: ImmutableList ) : RoomLink @@ -55,7 +56,7 @@ sealed interface PermalinkData { ) : EventLink data class EventIdAliasLink( - val roomAlias: String, + val roomAlias: RoomAlias, override val eventId: EventId, override val viaParameters: ImmutableList ) : EventLink diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index cd7100f667..1cae69bff7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -23,6 +23,7 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.childScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.ProgressCallback +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.core.UserId import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters @@ -462,9 +463,9 @@ class RustMatrixClient( } } - override suspend fun resolveRoomAlias(roomAlias: String): Result = withContext(sessionDispatcher) { + override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = withContext(sessionDispatcher) { runCatching { - client.resolveRoomAlias(roomAlias).let(::RoomId) + client.resolveRoomAlias(roomAlias.value).let(::RoomId) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt index 7bf095a9f8..f47247c0f5 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt @@ -20,6 +20,7 @@ import android.net.Uri import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.core.EventId +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.core.UserId import io.element.android.libraries.matrix.api.permalink.MatrixToConverter @@ -67,7 +68,7 @@ class DefaultPermalinkParser @Inject constructor( userId = UserId(id.id), ) is MatrixId.RoomAlias -> PermalinkData.RoomAliasLink( - roomAlias = id.alias, + roomAlias = RoomAlias(id.alias), viaParameters = viaParameters, ) is MatrixId.EventOnRoomId -> PermalinkData.EventIdLink( @@ -76,7 +77,7 @@ class DefaultPermalinkParser @Inject constructor( viaParameters = viaParameters, ) is MatrixId.EventOnRoomAlias -> PermalinkData.EventIdAliasLink( - roomAlias = id.alias, + roomAlias = RoomAlias(id.alias), eventId = EventId(id.eventId), viaParameters = viaParameters, ) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 7bb880986f..4f49ac844d 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.test import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.ProgressCallback +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.core.SessionId import io.element.android.libraries.matrix.api.core.UserId @@ -74,7 +75,7 @@ class FakeMatrixClient( private val encryptionService: FakeEncryptionService = FakeEncryptionService(), private val roomDirectoryService: RoomDirectoryService = FakeRoomDirectoryService(), private val accountManagementUrlString: Result = Result.success(null), - private val resolveRoomAliasResult: (String) -> Result = { Result.success(A_ROOM_ID) }, + private val resolveRoomAliasResult: (RoomAlias) -> Result = { Result.success(A_ROOM_ID) }, private val getRoomPreviewResult: (String) -> Result = { TODO("Not implemented") }, ) : MatrixClient { var setDisplayNameCalled: Boolean = false @@ -279,7 +280,7 @@ class FakeMatrixClient( return Result.success(Unit) } - override suspend fun resolveRoomAlias(roomAlias: String): Result { + override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result { return resolveRoomAliasResult(roomAlias) } diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt index 4d705983ff..7972b4d6a4 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt @@ -39,6 +39,7 @@ import io.element.android.libraries.designsystem.theme.currentUserMentionPillBac import io.element.android.libraries.designsystem.theme.currentUserMentionPillText import io.element.android.libraries.designsystem.theme.mentionPillBackground import io.element.android.libraries.designsystem.theme.mentionPillText +import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkData @@ -140,7 +141,7 @@ internal fun MentionSpanPreview() { "https://matrix.to/#/@me:matrix.org" -> PermalinkData.UserLink(UserId("@me:matrix.org")) "https://matrix.to/#/@other:matrix.org" -> PermalinkData.UserLink(UserId("@other:matrix.org")) "https://matrix.to/#/#room:matrix.org" -> PermalinkData.RoomAliasLink( - roomAlias = "#room:matrix.org", + roomAlias = RoomAlias("#room:matrix.org"), viaParameters = persistentListOf(), ) else -> TODO() diff --git a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt index a5f31718cd..d7e2bff7b1 100644 --- a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt +++ b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.textcomposer.impl.mentions import android.graphics.Color import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.test.A_SESSION_ID @@ -69,7 +70,7 @@ class MentionSpanProviderTest { fun `getting mention span for a room should return a MentionSpan with normal colors`() { permalinkParser.givenResult( PermalinkData.RoomAliasLink( - roomAlias = "#room:matrix.org", + roomAlias = RoomAlias("#room:matrix.org"), viaParameters = persistentListOf(), ) ) @@ -82,7 +83,7 @@ class MentionSpanProviderTest { fun `getting mention span for @room should return a MentionSpan with normal colors`() { permalinkParser.givenResult( PermalinkData.RoomAliasLink( - roomAlias = "#", + roomAlias = RoomAlias("#"), viaParameters = persistentListOf(), ) ) From ecd1bf76e23f673f7bffe1a9e2cb1f974e850d63 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 11:35:05 +0200 Subject: [PATCH 031/289] Use RoomId and RoomAlias in MatrixRoomInfo --- .../android/features/messages/impl/MessagesPresenterTest.kt | 2 +- .../messages/impl/typing/TypingNotificationPresenterTest.kt | 2 +- .../android/libraries/matrix/api/room/MatrixRoomInfo.kt | 6 ++++-- .../libraries/matrix/impl/room/MatrixRoomInfoMapper.kt | 6 ++++-- .../android/libraries/matrix/test/room/FakeMatrixRoom.kt | 5 +++-- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 002b34f0eb..8df2c6d705 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -720,7 +720,7 @@ class MessagesPresenterTest { private fun TestScope.createMessagesPresenter( coroutineDispatchers: CoroutineDispatchers = testCoroutineDispatchers(), matrixRoom: MatrixRoom = FakeMatrixRoom().apply { - givenRoomInfo(aRoomInfo(id = roomId.value, name = "")) + givenRoomInfo(aRoomInfo(id = roomId, name = "")) }, navigator: FakeMessagesNavigator = FakeMessagesNavigator(), clipboardHelper: FakeClipboardHelper = FakeClipboardHelper(), diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenterTest.kt index aaf0f9f774..540d9f67c4 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenterTest.kt @@ -201,7 +201,7 @@ class TypingNotificationPresenterTest { private fun createPresenter( matrixRoom: MatrixRoom = FakeMatrixRoom().apply { - givenRoomInfo(aRoomInfo(id = roomId.value, name = "")) + givenRoomInfo(aRoomInfo(id = roomId, name = "")) }, sessionPreferencesStore: SessionPreferencesStore = InMemorySessionPreferencesStore( isRenderTypingNotificationsEnabled = true diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt index 8ad8260a7d..eea1cc9c1b 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt @@ -17,6 +17,8 @@ package io.element.android.libraries.matrix.api.room import androidx.compose.runtime.Immutable +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.core.UserId import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem import kotlinx.collections.immutable.ImmutableList @@ -24,7 +26,7 @@ import kotlinx.collections.immutable.ImmutableMap @Immutable data class MatrixRoomInfo( - val id: String, + val id: RoomId, val name: String?, val topic: String?, val avatarUrl: String?, @@ -33,7 +35,7 @@ data class MatrixRoomInfo( val isSpace: Boolean, val isTombstoned: Boolean, val isFavorite: Boolean, - val canonicalAlias: String?, + val canonicalAlias: RoomAlias?, val alternativeAliases: ImmutableList, val currentUserMembership: CurrentUserMembership, val latestEvent: EventTimelineItem?, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt index 3331771f79..d3ef3283bd 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt @@ -16,6 +16,8 @@ package io.element.android.libraries.matrix.impl.room +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.core.UserId import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo @@ -35,7 +37,7 @@ class MatrixRoomInfoMapper( ) { fun map(rustRoomInfo: RustRoomInfo): MatrixRoomInfo = rustRoomInfo.use { return MatrixRoomInfo( - id = it.id, + id = RoomId(it.id), name = it.name, topic = it.topic, avatarUrl = it.avatarUrl, @@ -44,7 +46,7 @@ class MatrixRoomInfoMapper( isSpace = it.isSpace, isTombstoned = it.isTombstoned, isFavorite = it.isFavourite, - canonicalAlias = it.canonicalAlias, + canonicalAlias = it.canonicalAlias?.let(::RoomAlias), alternativeAliases = it.alternativeAliases.toImmutableList(), currentUserMembership = it.membership.map(), latestEvent = it.latestEvent?.use(timelineItemMapper::map), diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index 5938cd300b..ee3e1137bb 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.test.room import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.ProgressCallback +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.core.SessionId import io.element.android.libraries.matrix.api.core.TransactionId @@ -751,7 +752,7 @@ data class EndPollInvocation( ) fun aRoomInfo( - id: String = A_ROOM_ID.value, + id: RoomId = A_ROOM_ID, name: String? = A_ROOM_NAME, topic: String? = "A topic", avatarUrl: String? = AN_AVATAR_URL, @@ -760,7 +761,7 @@ fun aRoomInfo( isSpace: Boolean = false, isTombstoned: Boolean = false, isFavorite: Boolean = false, - canonicalAlias: String? = null, + canonicalAlias: RoomAlias? = null, alternativeAliases: List = emptyList(), currentUserMembership: CurrentUserMembership = CurrentUserMembership.JOINED, latestEvent: EventTimelineItem? = null, From 8327ea306f3e2ddf9894ad139b78d214b2591c83 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 12:27:26 +0200 Subject: [PATCH 032/289] Increase usage of `RoomAlias` --- .../features/joinroom/impl/JoinRoomPresenter.kt | 2 +- .../android/features/joinroom/impl/JoinRoomState.kt | 5 +++-- .../features/joinroom/impl/JoinRoomStateProvider.kt | 3 ++- .../features/messages/impl/MessagesPresenter.kt | 2 +- .../features/roomdetails/impl/RoomDetailsPresenter.kt | 2 +- .../features/roomdetails/impl/RoomDetailsState.kt | 6 ++++-- .../roomdetails/impl/RoomDetailsStateProvider.kt | 6 ++++-- .../features/roomdetails/impl/RoomDetailsView.kt | 10 ++++++---- .../features/roomdirectory/api/RoomDescription.kt | 7 ++++--- .../impl/root/RoomDirectoryStateProvider.kt | 5 +++-- .../android/libraries/matrix/api/room/MatrixRoom.kt | 5 +++-- .../libraries/matrix/api/room/preview/RoomPreview.kt | 3 ++- .../matrix/api/roomdirectory/RoomDescription.kt | 3 ++- .../libraries/matrix/api/roomlist/RoomSummary.kt | 3 ++- .../libraries/matrix/impl/room/RustMatrixRoom.kt | 9 +++++---- .../matrix/impl/room/preview/RoomPreviewMapper.kt | 3 ++- .../matrix/impl/roomdirectory/RoomDescriptionMapper.kt | 3 ++- .../matrix/impl/roomlist/RoomSummaryDetailsFactory.kt | 3 ++- .../libraries/matrix/test/room/FakeMatrixRoom.kt | 4 ++-- .../libraries/matrix/test/room/RoomSummaryFixture.kt | 3 ++- .../test/roomdirectory/RoomDescriptionFixture.kt | 3 ++- .../libraries/matrix/ui/components/SelectedRoom.kt | 3 ++- .../roomselect/impl/RoomSelectStateProvider.kt | 3 ++- .../libraries/roomselect/impl/RoomSelectView.kt | 2 +- 24 files changed, 60 insertions(+), 38 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index f088603d3b..f196b2495e 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -137,7 +137,7 @@ internal fun RoomDescription.toContentState(): ContentState { @VisibleForTesting internal fun MatrixRoomInfo.toContentState(): ContentState { return ContentState.Loaded( - roomId = RoomId(id), + roomId = id, name = name, topic = topic, alias = canonicalAlias, diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 08591c068e..98962b9b8d 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -20,6 +20,7 @@ import androidx.compose.runtime.Immutable import io.element.android.features.invite.api.response.AcceptDeclineInviteState 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.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId @Immutable @@ -41,7 +42,7 @@ sealed interface ContentState { val roomId: RoomId, val name: String?, val topic: String?, - val alias: String?, + val alias: RoomAlias?, val numberOfMembers: Long?, val isDirect: Boolean, val roomAvatarUrl: String?, @@ -50,7 +51,7 @@ sealed interface ContentState { val computedTitle = name ?: roomId.value val computedSubtitle = when { - alias != null -> alias + alias != null -> alias.value name == null -> "" else -> roomId.value } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 82b81d8e7b..2249b2865e 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -19,6 +19,7 @@ package io.element.android.features.joinroom.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState +import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId open class JoinRoomStateProvider : PreviewParameterProvider { @@ -49,7 +50,7 @@ fun aLoadingContentState(roomId: RoomId = A_ROOM_ID) = ContentState.Loading(room fun aLoadedContentState( roomId: RoomId = A_ROOM_ID, name: String = "Element X android", - alias: String? = "#exa:matrix.org", + alias: RoomAlias? = RoomAlias("#exa:matrix.org"), topic: String? = "Element X is a secure, private and decentralized messenger.", numberOfMembers: Long? = null, isDirect: Boolean = false, 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 4edc943a73..2b74cf1072 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 @@ -258,7 +258,7 @@ class MessagesPresenter @AssistedInject constructor( private fun MatrixRoomInfo.avatarData(): AvatarData { return AvatarData( - id = id, + id = id.value, name = name, url = avatarUrl ?: room.avatarUrl, size = AvatarSize.TimelineRoom diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index f0c96e74e2..c8b0f49346 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -128,7 +128,7 @@ class RoomDetailsPresenter @Inject constructor( val roomMemberDetailsState = roomMemberDetailsPresenter?.present() return RoomDetailsState( - roomId = room.roomId.value, + roomId = room.roomId, roomName = roomName, roomAlias = room.alias, roomAvatarUrl = roomAvatar, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt index f5abc5bcce..ebdd524ed6 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt @@ -18,13 +18,15 @@ package io.element.android.features.roomdetails.impl import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState +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.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomNotificationSettings data class RoomDetailsState( - val roomId: String, + val roomId: RoomId, val roomName: String, - val roomAlias: String?, + val roomAlias: RoomAlias?, val roomAvatarUrl: String?, val roomTopic: RoomTopicState, val memberCount: Long, 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 06b7ea7be7..f398a6704b 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 @@ -21,6 +21,8 @@ import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState import io.element.android.features.roomdetails.impl.members.details.aRoomMemberDetailsState +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.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipState @@ -71,9 +73,9 @@ fun aDmRoomMember( ) fun aRoomDetailsState( - roomId: String = "a room id", + roomId: RoomId = RoomId("!aRoomId:domain.com"), roomName: String = "Marketing", - roomAlias: String? = "#marketing:domain.com", + roomAlias: RoomAlias? = RoomAlias("#marketing:domain.com"), roomAvatarUrl: String? = null, roomTopic: RoomTopicState = RoomTopicState.ExistingTopic( "Welcome to #marketing, home of the Marketing team " + 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 ff4ece7bde..fc49bb383a 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 @@ -78,6 +78,8 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.utils.CommonDrawables +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.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.getBestName @@ -302,9 +304,9 @@ private fun MainActionsSection( @Composable private fun RoomHeaderSection( avatarUrl: String?, - roomId: String, + roomId: RoomId, roomName: String, - roomAlias: String?, + roomAlias: RoomAlias?, openAvatarPreview: (url: String) -> Unit, ) { Column( @@ -314,7 +316,7 @@ private fun RoomHeaderSection( horizontalAlignment = Alignment.CenterHorizontally, ) { Avatar( - avatarData = AvatarData(roomId, roomName, avatarUrl, AvatarSize.RoomHeader), + avatarData = AvatarData(roomId.value, roomName, avatarUrl, AvatarSize.RoomHeader), modifier = Modifier .size(70.dp) .clickable(enabled = avatarUrl != null) { openAvatarPreview(avatarUrl!!) } @@ -329,7 +331,7 @@ private fun RoomHeaderSection( if (roomAlias != null) { Spacer(modifier = Modifier.height(6.dp)) Text( - text = roomAlias, + text = roomAlias.value, style = ElementTheme.typography.fontBodyLgRegular, color = MaterialTheme.colorScheme.secondary, textAlign = TextAlign.Center, diff --git a/features/roomdirectory/api/src/main/kotlin/io/element/android/features/roomdirectory/api/RoomDescription.kt b/features/roomdirectory/api/src/main/kotlin/io/element/android/features/roomdirectory/api/RoomDescription.kt index a27f413e9b..909c34f959 100644 --- a/features/roomdirectory/api/src/main/kotlin/io/element/android/features/roomdirectory/api/RoomDescription.kt +++ b/features/roomdirectory/api/src/main/kotlin/io/element/android/features/roomdirectory/api/RoomDescription.kt @@ -20,6 +20,7 @@ import android.os.Parcelable import androidx.compose.runtime.Immutable 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.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize @@ -29,7 +30,7 @@ import kotlinx.parcelize.Parcelize data class RoomDescription( val roomId: RoomId, val name: String?, - val alias: String?, + val alias: RoomAlias?, val topic: String?, val avatarUrl: String?, val joinRule: JoinRule, @@ -42,14 +43,14 @@ data class RoomDescription( } @IgnoredOnParcel - val computedName = name ?: alias ?: roomId.value + val computedName = name ?: alias?.value ?: roomId.value @IgnoredOnParcel val computedDescription: String get() { return when { topic != null -> topic - name != null && alias != null -> alias + name != null && alias != null -> alias.value name == null && alias == null -> "" else -> roomId.value } diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryStateProvider.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryStateProvider.kt index e94271cfb8..bf682fc15b 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryStateProvider.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryStateProvider.kt @@ -19,6 +19,7 @@ package io.element.android.features.roomdirectory.impl.root import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.AsyncAction +import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf @@ -69,7 +70,7 @@ fun aRoomDescriptionList(): ImmutableList { roomId = RoomId("!exa:matrix.org"), name = "Element X Android", topic = "Element X is a secure, private and decentralized messenger.", - alias = "#element-x-android:matrix.org", + alias = RoomAlias("#element-x-android:matrix.org"), avatarUrl = null, joinRule = RoomDescription.JoinRule.PUBLIC, numberOfMembers = 2765, @@ -78,7 +79,7 @@ fun aRoomDescriptionList(): ImmutableList { roomId = RoomId("!exi:matrix.org"), name = "Element X iOS", topic = "Element X is a secure, private and decentralized messenger.", - alias = "#element-x-ios:matrix.org", + alias = RoomAlias("#element-x-ios:matrix.org"), avatarUrl = null, joinRule = RoomDescription.JoinRule.UNKNOWN, numberOfMembers = 356, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 761d87445a..5c28b84c01 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.api.room import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.ProgressCallback +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.core.SessionId import io.element.android.libraries.matrix.api.core.TransactionId @@ -45,8 +46,8 @@ interface MatrixRoom : Closeable { val roomId: RoomId val name: String? val displayName: String - val alias: String? - val alternativeAliases: List + val alias: RoomAlias? + val alternativeAliases: List val topic: String? val avatarUrl: String? val isEncrypted: Boolean diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt index 8ee7550b74..ad16561380 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt @@ -16,13 +16,14 @@ package io.element.android.libraries.matrix.api.room.preview +import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId data class RoomPreview( /** The room id for this room. */ val roomId: RoomId, /** The canonical alias for the room. */ - val canonicalAlias: String?, + val canonicalAlias : RoomAlias?, /** The room's name, if set. */ val name: String?, /** The room's topic, if set. */ diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomdirectory/RoomDescription.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomdirectory/RoomDescription.kt index 78d6cb0c94..75d203e0b7 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomdirectory/RoomDescription.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomdirectory/RoomDescription.kt @@ -16,13 +16,14 @@ package io.element.android.libraries.matrix.api.roomdirectory +import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId data class RoomDescription( val roomId: RoomId, val name: String?, val topic: String?, - val alias: String?, + val alias: RoomAlias?, val avatarUrl: String?, val joinRule: JoinRule, val isWorldReadable: Boolean, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt index b7955a9c79..2ab50630a1 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.api.roomlist +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.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomMember @@ -37,7 +38,7 @@ sealed interface RoomSummary { data class RoomSummaryDetails( val roomId: RoomId, val name: String, - val canonicalAlias: String?, + val canonicalAlias: RoomAlias?, val isDirect: Boolean, val avatarUrl: String?, val lastMessage: RoomMessage?, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 59e5c99efa..97035f0583 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -20,6 +20,7 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.childScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.ProgressCallback +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.core.SessionId import io.element.android.libraries.matrix.api.core.TransactionId @@ -205,11 +206,11 @@ class RustMatrixRoom( override val isEncrypted: Boolean get() = runCatching { innerRoom.isEncrypted() }.getOrDefault(false) - override val alias: String? - get() = runCatching { innerRoom.canonicalAlias() }.getOrDefault(null) + override val alias: RoomAlias? + get() = runCatching { innerRoom.canonicalAlias()?.let(::RoomAlias) }.getOrDefault(null) - override val alternativeAliases: List - get() = runCatching { innerRoom.alternativeAliases() }.getOrDefault(emptyList()) + override val alternativeAliases: List + get() = runCatching { innerRoom.alternativeAliases().map { RoomAlias(it) } }.getOrDefault(emptyList()) override val isPublic: Boolean get() = runCatching { innerRoom.isPublic() }.getOrDefault(false) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt index fb18205978..75286becda 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.impl.room.preview +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.room.preview.RoomPreview import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview @@ -24,7 +25,7 @@ object RoomPreviewMapper { fun map(roomPreview: RustRoomPreview): RoomPreview { return RoomPreview( roomId = RoomId(roomPreview.roomId), - canonicalAlias = roomPreview.canonicalAlias, + canonicalAlias = roomPreview.canonicalAlias?.let(::RoomAlias), name = roomPreview.name, topic = roomPreview.topic, avatarUrl = roomPreview.avatarUrl, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RoomDescriptionMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RoomDescriptionMapper.kt index 876a58d3a5..b256f589f4 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RoomDescriptionMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RoomDescriptionMapper.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.impl.roomdirectory +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.roomdirectory.RoomDescription import org.matrix.rustcomponents.sdk.PublicRoomJoinRule @@ -28,7 +29,7 @@ class RoomDescriptionMapper { name = roomDescription.name, topic = roomDescription.topic, avatarUrl = roomDescription.avatarUrl, - alias = roomDescription.alias, + alias = roomDescription.alias?.let(::RoomAlias), joinRule = when (roomDescription.joinRule) { PublicRoomJoinRule.PUBLIC -> RoomDescription.JoinRule.PUBLIC PublicRoomJoinRule.KNOCK -> RoomDescription.JoinRule.KNOCK diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt index 834c49ac2a..a70030cc70 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.impl.roomlist +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.roomlist.RoomSummaryDetails import io.element.android.libraries.matrix.impl.notificationsettings.RoomNotificationSettingsMapper @@ -33,7 +34,7 @@ class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFacto return RoomSummaryDetails( roomId = RoomId(roomInfo.id), name = roomInfo.name ?: roomInfo.id, - canonicalAlias = roomInfo.canonicalAlias, + canonicalAlias = roomInfo.canonicalAlias?.let(::RoomAlias), isDirect = roomInfo.isDirect, avatarUrl = roomInfo.avatarUrl, numUnreadMentions = roomInfo.numUnreadMentions.toInt(), diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index ee3e1137bb..830ac3a6e2 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -75,8 +75,8 @@ class FakeMatrixRoom( override val topic: String? = null, override val avatarUrl: String? = null, override val isEncrypted: Boolean = false, - override val alias: String? = null, - override val alternativeAliases: List = emptyList(), + override val alias: RoomAlias? = null, + override val alternativeAliases: List = emptyList(), override val isPublic: Boolean = true, override val isSpace: Boolean = false, override val isDirect: Boolean = false, diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt index b9b078c5f3..6b9383ef05 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt @@ -17,6 +17,7 @@ package io.element.android.libraries.matrix.test.room import io.element.android.libraries.matrix.api.core.EventId +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.core.UserId import io.element.android.libraries.matrix.api.room.CurrentUserMembership @@ -72,7 +73,7 @@ fun aRoomSummaryDetails( isMarkedUnread: Boolean = false, notificationMode: RoomNotificationMode? = null, inviter: RoomMember? = null, - canonicalAlias: String? = null, + canonicalAlias: RoomAlias? = null, hasRoomCall: Boolean = false, isDm: Boolean = false, isFavorite: Boolean = false, diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/roomdirectory/RoomDescriptionFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/roomdirectory/RoomDescriptionFixture.kt index 6e96ca4452..174f5f7f0c 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/roomdirectory/RoomDescriptionFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/roomdirectory/RoomDescriptionFixture.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.test.roomdirectory +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.roomdirectory.RoomDescription import io.element.android.libraries.matrix.test.A_ROOM_ID @@ -24,7 +25,7 @@ fun aRoomDescription( roomId: RoomId = A_ROOM_ID, name: String? = null, topic: String? = null, - alias: String? = null, + alias: RoomAlias? = null, avatarUrl: String? = null, joinRule: RoomDescription.JoinRule = RoomDescription.JoinRule.UNKNOWN, isWorldReadable: Boolean = true, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt index 4caad93b46..4b7c17a1ec 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt @@ -43,6 +43,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Text +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.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomMember @@ -106,7 +107,7 @@ internal fun SelectedRoomPreview() = ElementPreview { fun aRoomSummaryDetails( roomId: RoomId = RoomId("!room:domain"), name: String = "roomName", - canonicalAlias: String? = null, + canonicalAlias: RoomAlias? = null, isDirect: Boolean = true, avatarUrl: String? = null, lastMessage: RoomMessage? = null, diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt index ecd13338ca..f0daf8b7fa 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.roomselect.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.designsystem.theme.components.SearchBarResultState +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.roomlist.RoomSummaryDetails import io.element.android.libraries.matrix.ui.components.aRoomSummaryDetails @@ -65,6 +66,6 @@ private fun aForwardMessagesRoomList() = persistentListOf( aRoomSummaryDetails( roomId = RoomId("!room2:domain"), name = "Room with alias", - canonicalAlias = "#alias:example.org", + canonicalAlias = RoomAlias("#alias:example.org"), ), ) diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt index b2c703fdb1..eb6143107f 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt @@ -243,7 +243,7 @@ private fun RoomSummaryView( // Alias summary.canonicalAlias?.let { alias -> Text( - text = alias, + text = alias.value, color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodySmRegular, maxLines = 1, From ea3a1f363a540cf68e90f479824cf266d118ae1a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 12:20:25 +0200 Subject: [PATCH 033/289] Alias permalink navigation - WIP --- .../android/appnav/LoggedInFlowNode.kt | 37 +++++++++-------- .../android/appnav/room/RoomFlowNode.kt | 37 +++++++++-------- .../joinroom/api/JoinRoomEntryPoint.kt | 4 +- .../features/joinroom/impl/JoinRoomNode.kt | 2 +- .../joinroom/impl/JoinRoomPresenter.kt | 16 ++++---- .../features/joinroom/impl/JoinRoomState.kt | 5 ++- .../joinroom/impl/JoinRoomStateProvider.kt | 5 ++- .../joinroom/impl/di/JoinRoomModule.kt | 6 +-- .../libraries/matrix/api/MatrixClient.kt | 5 ++- .../matrix/api/core/RoomIdOrAlias.kt | 39 ++++++++++++++++++ .../libraries/matrix/impl/RustMatrixClient.kt | 40 +++++++++++++------ .../libraries/matrix/test/FakeMatrixClient.kt | 9 +++-- 12 files changed, 137 insertions(+), 68 deletions(-) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomIdOrAlias.kt diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 190623c9b6..1fb3c5648e 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -66,6 +66,8 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.MAIN_SPACE import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.RoomIdOrAlias +import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.services.appnavstate.api.AppNavigationStateService @@ -190,7 +192,7 @@ class LoggedInFlowNode @AssistedInject constructor( @Parcelize data class Room( - val roomId: RoomId, + val roomIdOrAlias: RoomIdOrAlias, val roomDescription: RoomDescription? = null, val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(null) ) : NavTarget @@ -229,7 +231,7 @@ class LoggedInFlowNode @AssistedInject constructor( NavTarget.RoomList -> { val callback = object : RoomListEntryPoint.Callback { override fun onRoomClicked(roomId: RoomId) { - backstack.push(NavTarget.Room(roomId)) + backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias())) } override fun onSettingsClicked() { @@ -245,7 +247,7 @@ class LoggedInFlowNode @AssistedInject constructor( } override fun onRoomSettingsClicked(roomId: RoomId) { - backstack.push(NavTarget.Room(roomId, initialElement = RoomNavigationTarget.Details)) + backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias(), initialElement = RoomNavigationTarget.Details)) } override fun onReportBugClicked() { @@ -264,7 +266,7 @@ class LoggedInFlowNode @AssistedInject constructor( is NavTarget.Room -> { val callback = object : JoinedRoomLoadedFlowNode.Callback { override fun onOpenRoom(roomId: RoomId) { - backstack.push(NavTarget.Room(roomId)) + backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias())) } override fun onForwardedToSingleRoom(roomId: RoomId) { @@ -279,20 +281,23 @@ class LoggedInFlowNode @AssistedInject constructor( Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") } is PermalinkData.RoomIdLink -> { - backstack.push(NavTarget.Room(data.roomId)) + backstack.push(NavTarget.Room(data.roomId.toRoomIdOrAlias())) } is PermalinkData.RoomAliasLink -> { - // FIXME Implement room alias navigation - Timber.e("Room alias link clicked: ${data.roomAlias}. TODO Handle a room alias navigation") + backstack.push(NavTarget.Room(data.roomAlias.toRoomIdOrAlias())) } is PermalinkData.EventIdAliasLink -> { - // FIXME Implement event alias navigation - Timber.e("Event with room alias link clicked: ${data.eventId}. TODO Handle an event with room alias navigation") + backstack.push( + NavTarget.Room( + data.roomAlias.toRoomIdOrAlias(), + initialElement = RoomNavigationTarget.Messages(data.eventId) + ) + ) } is PermalinkData.EventIdLink -> { backstack.push( NavTarget.Room( - data.roomId, + data.roomId.toRoomIdOrAlias(), initialElement = RoomNavigationTarget.Messages(data.eventId) ) ) @@ -310,7 +315,7 @@ class LoggedInFlowNode @AssistedInject constructor( } } val inputs = RoomFlowNode.Inputs( - roomId = navTarget.roomId, + roomIdOrAlias = navTarget.roomIdOrAlias, roomDescription = Optional.ofNullable(navTarget.roomDescription), initialElement = navTarget.initialElement ) @@ -327,7 +332,7 @@ class LoggedInFlowNode @AssistedInject constructor( } override fun onOpenRoomNotificationSettings(roomId: RoomId) { - backstack.push(NavTarget.Room(roomId, initialElement = RoomNavigationTarget.NotificationSettings)) + backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias(), initialElement = RoomNavigationTarget.NotificationSettings)) } } val inputs = PreferencesEntryPoint.Params(navTarget.initialElement) @@ -339,7 +344,7 @@ class LoggedInFlowNode @AssistedInject constructor( NavTarget.CreateRoom -> { val callback = object : CreateRoomEntryPoint.Callback { override fun onSuccess(roomId: RoomId) { - backstack.replace(NavTarget.Room(roomId)) + backstack.replace(NavTarget.Room(roomId.toRoomIdOrAlias())) } } @@ -366,11 +371,11 @@ class LoggedInFlowNode @AssistedInject constructor( roomDirectoryEntryPoint.nodeBuilder(this, buildContext) .callback(object : RoomDirectoryEntryPoint.Callback { override fun onRoomJoined(roomId: RoomId) { - backstack.push(NavTarget.Room(roomId)) + backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias())) } override fun onResultClicked(roomDescription: RoomDescription) { - backstack.push(NavTarget.Room(roomDescription.roomId, roomDescription)) + backstack.push(NavTarget.Room(roomDescription.roomId.toRoomIdOrAlias(), roomDescription)) } }) .build() @@ -389,7 +394,7 @@ class LoggedInFlowNode @AssistedInject constructor( if (!canShowRoomList()) return attachChild { backstack.singleTop(NavTarget.RoomList) - backstack.push(NavTarget.Room(roomId)) + backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias())) } } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index 2f62045b22..048c1826f2 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -47,8 +47,10 @@ import io.element.android.libraries.designsystem.theme.components.CircularProgre import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import kotlinx.coroutines.Job import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -73,7 +75,7 @@ class RoomFlowNode @AssistedInject constructor( plugins = plugins ) { data class Inputs( - val roomId: RoomId, + val roomIdOrAlias: RoomIdOrAlias, val roomDescription: Optional, val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(), ) : NodeInputs @@ -88,42 +90,45 @@ class RoomFlowNode @AssistedInject constructor( data object JoinRoom : NavTarget @Parcelize - data object JoinedRoom : NavTarget + data class JoinedRoom(val roomId: RoomId) : NavTarget } + private var roomMembershipJob: Job? = null + override fun onBuilt() { super.onBuilt() client.getRoomInfoFlow( - inputs.roomId + inputs.roomIdOrAlias ).onEach { roomInfo -> Timber.d("Room membership: ${roomInfo.map { it.currentUserMembership }}") - if (roomInfo.getOrNull()?.currentUserMembership == CurrentUserMembership.JOINED) { - backstack.newRoot(NavTarget.JoinedRoom) + val info = roomInfo.getOrNull() + if (info?.currentUserMembership == CurrentUserMembership.JOINED) { + backstack.newRoot(NavTarget.JoinedRoom(info.id)) + // When leaving the room from this session only, navigate up. + roomMembershipJob?.cancel() + roomMembershipJob = roomMembershipObserver.updates + .filter { update -> update.roomId == info.id && !update.isUserInRoom } + .onEach { + navigateUp() + } + .launchIn(lifecycleScope) } else { backstack.newRoot(NavTarget.JoinRoom) } } .launchIn(lifecycleScope) - - // When leaving the room from this session only, navigate up. - roomMembershipObserver.updates - .filter { update -> update.roomId == inputs.roomId && !update.isUserInRoom } - .onEach { - navigateUp() - } - .launchIn(lifecycleScope) } override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { NavTarget.Loading -> loadingNode(buildContext) NavTarget.JoinRoom -> { - val inputs = JoinRoomEntryPoint.Inputs(inputs.roomId, roomDescription = inputs.roomDescription) + val inputs = JoinRoomEntryPoint.Inputs(inputs.roomIdOrAlias, roomDescription = inputs.roomDescription) joinRoomEntryPoint.createNode(this, buildContext, inputs) } - NavTarget.JoinedRoom -> { + is NavTarget.JoinedRoom -> { val roomFlowNodeCallback = plugins() - val inputs = JoinedRoomFlowNode.Inputs(inputs.roomId, initialElement = inputs.initialElement) + val inputs = JoinedRoomFlowNode.Inputs(navTarget.roomId, initialElement = inputs.initialElement) createNode(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback) } } diff --git a/features/joinroom/api/src/main/kotlin/io/element/android/features/joinroom/api/JoinRoomEntryPoint.kt b/features/joinroom/api/src/main/kotlin/io/element/android/features/joinroom/api/JoinRoomEntryPoint.kt index 60f49b9d36..0986af81d3 100644 --- a/features/joinroom/api/src/main/kotlin/io/element/android/features/joinroom/api/JoinRoomEntryPoint.kt +++ b/features/joinroom/api/src/main/kotlin/io/element/android/features/joinroom/api/JoinRoomEntryPoint.kt @@ -21,14 +21,14 @@ import com.bumble.appyx.core.node.Node import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.FeatureEntryPoint import io.element.android.libraries.architecture.NodeInputs -import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import java.util.Optional interface JoinRoomEntryPoint : FeatureEntryPoint { fun createNode(parentNode: Node, buildContext: BuildContext, inputs: Inputs): Node data class Inputs( - val roomId: RoomId, + val roomIdOrAlias: RoomIdOrAlias, val roomDescription: Optional, ) : NodeInputs } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt index eaa195d88d..516c789079 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt @@ -37,7 +37,7 @@ class JoinRoomNode @AssistedInject constructor( private val acceptDeclineInviteView: AcceptDeclineInviteView, ) : Node(buildContext, plugins = plugins) { private val inputs: JoinRoomEntryPoint.Inputs = inputs() - private val presenter = presenterFactory.create(inputs.roomId, inputs.roomDescription) + private val presenter = presenterFactory.create(inputs.roomIdOrAlias, inputs.roomDescription) @Composable override fun View(modifier: Modifier) { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index f196b2495e..818857c69a 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -30,7 +30,7 @@ import io.element.android.features.invite.api.response.InviteData import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient -import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview @@ -38,20 +38,20 @@ import kotlinx.coroutines.launch import java.util.Optional class JoinRoomPresenter @AssistedInject constructor( - @Assisted private val roomId: RoomId, + @Assisted private val roomIdOrAlias: RoomIdOrAlias, @Assisted private val roomDescription: Optional, private val matrixClient: MatrixClient, private val acceptDeclineInvitePresenter: Presenter, ) : Presenter { interface Factory { - fun create(roomId: RoomId, roomDescription: Optional): JoinRoomPresenter + fun create(roomIdOrAlias: RoomIdOrAlias, roomDescription: Optional): JoinRoomPresenter } @Composable override fun present(): JoinRoomState { val coroutineScope = rememberCoroutineScope() - val roomInfo by matrixClient.getRoomInfoFlow(roomId).collectAsState(initial = Optional.empty()) - val contentState by produceState(initialValue = ContentState.Loading(roomId), key1 = roomInfo) { + val roomInfo by matrixClient.getRoomInfoFlow(roomIdOrAlias).collectAsState(initial = Optional.empty()) + val contentState by produceState(initialValue = ContentState.Loading(roomIdOrAlias), key1 = roomInfo) { value = when { roomInfo.isPresent -> { roomInfo.get().toContentState() @@ -61,12 +61,12 @@ class JoinRoomPresenter @AssistedInject constructor( } else -> { coroutineScope.launch { - val result = matrixClient.getRoomPreview(roomId.value) + val result = matrixClient.getRoomPreview(roomIdOrAlias) value = result.getOrNull() ?.toContentState() - ?: ContentState.UnknownRoom(roomId) + ?: ContentState.UnknownRoom(roomIdOrAlias) } - ContentState.Loading(roomId) + ContentState.Loading(roomIdOrAlias) } } } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 98962b9b8d..bf57a0fdcf 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -22,6 +22,7 @@ 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.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.RoomIdOrAlias @Immutable data class JoinRoomState( @@ -36,8 +37,8 @@ data class JoinRoomState( } sealed interface ContentState { - data class Loading(val roomId: RoomId) : ContentState - data class UnknownRoom(val roomId: RoomId) : ContentState + data class Loading(val roomIdOrAlias: RoomIdOrAlias) : ContentState + data class UnknownRoom(val roomIdOrAlias: RoomIdOrAlias) : ContentState data class Loaded( val roomId: RoomId, val name: String?, diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 2249b2865e..3eea5e723b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -21,6 +21,7 @@ import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState 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.core.toRoomIdOrAlias open class JoinRoomStateProvider : PreviewParameterProvider { override val values: Sequence @@ -43,9 +44,9 @@ open class JoinRoomStateProvider : PreviewParameterProvider { ) } -fun anUnknownContentState(roomId: RoomId = A_ROOM_ID) = ContentState.UnknownRoom(roomId) +fun anUnknownContentState(roomId: RoomId = A_ROOM_ID) = ContentState.UnknownRoom(roomId.toRoomIdOrAlias()) -fun aLoadingContentState(roomId: RoomId = A_ROOM_ID) = ContentState.Loading(roomId) +fun aLoadingContentState(roomId: RoomId = A_ROOM_ID) = ContentState.Loading(roomId.toRoomIdOrAlias()) fun aLoadedContentState( roomId: RoomId = A_ROOM_ID, diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt index 6c1dfd491d..0bce71b885 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt @@ -25,7 +25,7 @@ import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient -import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import java.util.Optional @Module @@ -37,9 +37,9 @@ object JoinRoomModule { acceptDeclineInvitePresenter: Presenter, ): JoinRoomPresenter.Factory { return object : JoinRoomPresenter.Factory { - override fun create(roomId: RoomId, roomDescription: Optional): JoinRoomPresenter { + override fun create(roomIdOrAlias: RoomIdOrAlias, roomDescription: Optional): JoinRoomPresenter { return JoinRoomPresenter( - roomId = roomId, + roomIdOrAlias = roomIdOrAlias, roomDescription = roomDescription, matrixClient = client, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index c79edd8465..e6bbee4f9a 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.api import io.element.android.libraries.matrix.api.core.ProgressCallback 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.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters @@ -94,12 +95,12 @@ interface MatrixClient : Closeable { suspend fun getAccountManagementUrl(action: AccountManagementAction?): Result suspend fun uploadMedia(mimeType: String, data: ByteArray, progressCallback: ProgressCallback?): Result fun roomMembershipObserver(): RoomMembershipObserver - fun getRoomInfoFlow(roomId: RoomId): Flow> + fun getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias): Flow> fun isMe(userId: UserId?) = userId == sessionId suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result suspend fun getRecentlyVisitedRooms(): Result> suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result - suspend fun getRoomPreview(roomIdOrAlias: String): Result + suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomIdOrAlias.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomIdOrAlias.kt new file mode 100644 index 0000000000..5dd4117b0a --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomIdOrAlias.kt @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.core + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +sealed interface RoomIdOrAlias : Parcelable { + @Parcelize + @JvmInline + value class Id(val roomId: RoomId) : RoomIdOrAlias + + @Parcelize + @JvmInline + value class Alias(val roomAlias: RoomAlias) : RoomIdOrAlias + + val identifier: String + get() = when (this) { + is Id -> roomId.value + is Alias -> roomAlias.value + } +} + +fun RoomId.toRoomIdOrAlias() = RoomIdOrAlias.Id(this) +fun RoomAlias.toRoomIdOrAlias() = RoomIdOrAlias.Alias(this) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 1cae69bff7..adc96d0b84 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -25,6 +25,7 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.ProgressCallback 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.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters import io.element.android.libraries.matrix.api.createroom.RoomPreset @@ -469,9 +470,9 @@ class RustMatrixClient( } } - override suspend fun getRoomPreview(roomIdOrAlias: String): Result = withContext(sessionDispatcher) { + override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result = withContext(sessionDispatcher) { runCatching { - client.getRoomPreview(roomIdOrAlias).let(RoomPreviewMapper::map) + client.getRoomPreview(roomIdOrAlias.identifier).let(RoomPreviewMapper::map) } } @@ -561,18 +562,33 @@ class RustMatrixClient( override fun roomMembershipObserver(): RoomMembershipObserver = roomMembershipObserver - override fun getRoomInfoFlow(roomId: RoomId): Flow> { + override fun getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias): Flow> { return flow { - var room = getRoom(roomId) - if (room == null) { - emit(Optional.empty()) - awaitRoom(roomId, INFINITE) - room = getRoom(roomId) + val roomId = when (roomIdOrAlias) { + is RoomIdOrAlias.Alias -> { + resolveRoomAlias(roomIdOrAlias.roomAlias) + .onFailure { + // TODO Get a way to emit an error + Timber.e("Unable to resolve room alias ${roomIdOrAlias.roomAlias}") + emit(Optional.empty()) + return@flow + } + .getOrNull() + } + is RoomIdOrAlias.Id -> roomIdOrAlias.roomId } - room?.use { - room.roomInfoFlow - .map { roomInfo -> Optional.of(roomInfo) } - .collect(this) + if (roomId != null) { + var room = getRoom(roomId) + if (room == null) { + emit(Optional.empty()) + awaitRoom(roomId, INFINITE) + room = getRoom(roomId) + } + room?.use { + room.roomInfoFlow + .map { roomInfo -> Optional.of(roomInfo) } + .collect(this) + } } }.distinctUntilChanged() } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 4f49ac844d..1fc51cda94 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -20,6 +20,7 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.ProgressCallback 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.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters @@ -76,7 +77,7 @@ class FakeMatrixClient( private val roomDirectoryService: RoomDirectoryService = FakeRoomDirectoryService(), private val accountManagementUrlString: Result = Result.success(null), private val resolveRoomAliasResult: (RoomAlias) -> Result = { Result.success(A_ROOM_ID) }, - private val getRoomPreviewResult: (String) -> Result = { TODO("Not implemented") }, + private val getRoomPreviewResult: (RoomIdOrAlias) -> Result = { TODO("Not implemented") }, ) : MatrixClient { var setDisplayNameCalled: Boolean = false private set @@ -106,7 +107,7 @@ class FakeMatrixClient( Result.success(it) } - var getRoomInfoFlowLambda = { _: RoomId -> + var getRoomInfoFlowLambda = { _: RoomIdOrAlias -> flowOf>(Optional.empty()) } @@ -284,7 +285,7 @@ class FakeMatrixClient( return resolveRoomAliasResult(roomAlias) } - override suspend fun getRoomPreview(roomIdOrAlias: String): Result { + override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result { return getRoomPreviewResult(roomIdOrAlias) } @@ -292,5 +293,5 @@ class FakeMatrixClient( return Result.success(visitedRoomsId) } - override fun getRoomInfoFlow(roomId: RoomId) = getRoomInfoFlowLambda(roomId) + override fun getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias) = getRoomInfoFlowLambda(roomIdOrAlias) } From 09faa6d1c9d0c4673696613fb1296e219dd1d96d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 12:45:24 +0200 Subject: [PATCH 034/289] Simplify PermalinkData, now that we have RoomIdOrAlias interface. --- .../android/appnav/LoggedInFlowNode.kt | 21 ++-------- .../features/messages/impl/MessagesNode.kt | 5 +-- .../matrix/api/permalink/PermalinkData.kt | 38 ++++--------------- .../impl/permalink/DefaultPermalinkParser.kt | 21 +++++----- .../mentions/MentionSpanProvider.kt | 6 ++- .../impl/mentions/MentionSpanProviderTest.kt | 12 +++--- 6 files changed, 32 insertions(+), 71 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 1fb3c5648e..2e71759269 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -280,25 +280,12 @@ class LoggedInFlowNode @AssistedInject constructor( // FIXME: Add a user profile screen. Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") } - is PermalinkData.RoomIdLink -> { - backstack.push(NavTarget.Room(data.roomId.toRoomIdOrAlias())) - } - is PermalinkData.RoomAliasLink -> { - backstack.push(NavTarget.Room(data.roomAlias.toRoomIdOrAlias())) - } - is PermalinkData.EventIdAliasLink -> { + is PermalinkData.RoomLink -> { backstack.push( NavTarget.Room( - data.roomAlias.toRoomIdOrAlias(), - initialElement = RoomNavigationTarget.Messages(data.eventId) - ) - ) - } - is PermalinkData.EventIdLink -> { - backstack.push( - NavTarget.Room( - data.roomId.toRoomIdOrAlias(), - initialElement = RoomNavigationTarget.Messages(data.eventId) + data.roomIdOrAlias, + initialElement = RoomNavigationTarget.Messages(data.eventId), + // TODO Use the viaParameters ) ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 0a4d1f039d..b87e1cb343 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -123,10 +123,7 @@ class MessagesNode @AssistedInject constructor( callback?.onPermalinkClicked(permalink) } } - is PermalinkData.RoomIdLink, - is PermalinkData.RoomAliasLink, - is PermalinkData.EventIdAliasLink, - is PermalinkData.EventIdLink -> { + is PermalinkData.RoomLink -> { callback?.onPermalinkClicked(permalink) } is PermalinkData.FallbackLink, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt index fff7e22380..ab979320d7 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt @@ -19,10 +19,11 @@ package io.element.android.libraries.matrix.api.permalink import android.net.Uri import androidx.compose.runtime.Immutable import io.element.android.libraries.matrix.api.core.EventId -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.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf /** * This sealed class represents all the permalink cases. @@ -30,36 +31,11 @@ import kotlinx.collections.immutable.ImmutableList */ @Immutable sealed interface PermalinkData { - sealed interface RoomLink : PermalinkData { - val viaParameters: ImmutableList - } - - data class RoomIdLink( - val roomId: RoomId, - override val viaParameters: ImmutableList - ) : RoomLink - - data class RoomAliasLink( - val roomAlias: RoomAlias, - override val viaParameters: ImmutableList - ) : RoomLink - - sealed interface EventLink : PermalinkData { - val eventId: EventId - val viaParameters: ImmutableList - } - - data class EventIdLink( - val roomId: RoomId, - override val eventId: EventId, - override val viaParameters: ImmutableList - ) : EventLink - - data class EventIdAliasLink( - val roomAlias: RoomAlias, - override val eventId: EventId, - override val viaParameters: ImmutableList - ) : EventLink + data class RoomLink( + val roomIdOrAlias: RoomIdOrAlias, + val eventId: EventId? = null, + val viaParameters: ImmutableList = persistentListOf() + ) : PermalinkData /* * &room_name=Team2 diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt index f47247c0f5..b3b7d1fe38 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt @@ -23,6 +23,7 @@ import io.element.android.libraries.matrix.api.core.EventId 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.core.UserId +import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.permalink.MatrixToConverter import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser @@ -60,24 +61,24 @@ class DefaultPermalinkParser @Inject constructor( } else { val viaParameters = result.via.toImmutableList() when (val id = result.id) { - is MatrixId.Room -> PermalinkData.RoomIdLink( - roomId = RoomId(id.id), - viaParameters = viaParameters, - ) is MatrixId.User -> PermalinkData.UserLink( userId = UserId(id.id), ) - is MatrixId.RoomAlias -> PermalinkData.RoomAliasLink( - roomAlias = RoomAlias(id.alias), + is MatrixId.Room -> PermalinkData.RoomLink( + roomIdOrAlias = RoomId(id.id).toRoomIdOrAlias(), viaParameters = viaParameters, ) - is MatrixId.EventOnRoomId -> PermalinkData.EventIdLink( - roomId = RoomId(id.roomId), + is MatrixId.RoomAlias -> PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias(id.alias).toRoomIdOrAlias(), + viaParameters = viaParameters, + ) + is MatrixId.EventOnRoomId -> PermalinkData.RoomLink( + roomIdOrAlias = RoomId(id.roomId).toRoomIdOrAlias(), eventId = EventId(id.eventId), viaParameters = viaParameters, ) - is MatrixId.EventOnRoomAlias -> PermalinkData.EventIdAliasLink( - roomAlias = RoomAlias(id.alias), + is MatrixId.EventOnRoomAlias -> PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias(id.alias).toRoomIdOrAlias(), eventId = EventId(id.eventId), viaParameters = viaParameters, ) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt index 7972b4d6a4..7d8bfd34ce 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt @@ -42,6 +42,7 @@ import io.element.android.libraries.designsystem.theme.mentionPillText import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser import kotlinx.collections.immutable.persistentListOf @@ -140,8 +141,9 @@ internal fun MentionSpanPreview() { return when (uriString) { "https://matrix.to/#/@me:matrix.org" -> PermalinkData.UserLink(UserId("@me:matrix.org")) "https://matrix.to/#/@other:matrix.org" -> PermalinkData.UserLink(UserId("@other:matrix.org")) - "https://matrix.to/#/#room:matrix.org" -> PermalinkData.RoomAliasLink( - roomAlias = RoomAlias("#room:matrix.org"), + "https://matrix.to/#/#room:matrix.org" -> PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias("#room:matrix.org").toRoomIdOrAlias(), + eventId = null, viaParameters = persistentListOf(), ) else -> TODO() diff --git a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt index d7e2bff7b1..a3a4ee7884 100644 --- a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt +++ b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt @@ -20,12 +20,12 @@ import android.graphics.Color import com.google.common.truth.Truth.assertThat import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.test.A_SESSION_ID import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser import io.element.android.libraries.textcomposer.mentions.MentionSpanProvider import io.element.android.tests.testutils.WarmUpRule -import kotlinx.collections.immutable.persistentListOf import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -69,9 +69,8 @@ class MentionSpanProviderTest { @Test fun `getting mention span for a room should return a MentionSpan with normal colors`() { permalinkParser.givenResult( - PermalinkData.RoomAliasLink( - roomAlias = RoomAlias("#room:matrix.org"), - viaParameters = persistentListOf(), + PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias("#room:matrix.org").toRoomIdOrAlias(), ) ) val mentionSpan = mentionSpanProvider.getMentionSpanFor("#room:matrix.org", "https://matrix.to/#/#room:matrix.org") @@ -82,9 +81,8 @@ class MentionSpanProviderTest { @Test fun `getting mention span for @room should return a MentionSpan with normal colors`() { permalinkParser.givenResult( - PermalinkData.RoomAliasLink( - roomAlias = RoomAlias("#"), - viaParameters = persistentListOf(), + PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias("#").toRoomIdOrAlias(), ) ) val mentionSpan = mentionSpanProvider.getMentionSpanFor("@room", "#") From 235ef2a71bfe0d2f938eff7a38bc8f3531198064 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 15:16:53 +0200 Subject: [PATCH 035/289] Resolve RoomId in RoomFlowNode. --- .../android/appnav/room/RoomFlowNode.kt | 75 ++++++++++++++----- .../joinroom/api/JoinRoomEntryPoint.kt | 2 + .../features/joinroom/impl/JoinRoomNode.kt | 6 +- .../joinroom/impl/JoinRoomPresenter.kt | 10 ++- .../joinroom/impl/di/JoinRoomModule.kt | 8 +- .../joinroom/impl/JoinRoomPresenterTest.kt | 7 +- .../libraries/matrix/api/MatrixClient.kt | 2 +- .../libraries/matrix/impl/RustMatrixClient.kt | 35 +++------ .../libraries/matrix/test/FakeMatrixClient.kt | 4 +- 9 files changed, 98 insertions(+), 51 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index 048c1826f2..a752920800 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -43,17 +43,19 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs +import io.element.android.libraries.designsystem.components.async.AsyncFailure import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient +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.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomMembershipObserver -import kotlinx.coroutines.Job import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import timber.log.Timber import java.util.Optional @@ -87,43 +89,72 @@ class RoomFlowNode @AssistedInject constructor( data object Loading : NavTarget @Parcelize - data object JoinRoom : NavTarget + data class JoinRoom(val roomId: RoomId) : NavTarget + + @Parcelize + data class RoomAliasError(val roomAlias: RoomAlias) : NavTarget @Parcelize data class JoinedRoom(val roomId: RoomId) : NavTarget } - private var roomMembershipJob: Job? = null - override fun onBuilt() { super.onBuilt() + resolveRoomId() + } + + private fun resolveRoomId() { + lifecycleScope.launch { + when (val i = inputs.roomIdOrAlias) { + is RoomIdOrAlias.Alias -> { + client.resolveRoomAlias(i.roomAlias) + .onFailure { + Timber.e(it, "Failed to resolve room alias") + backstack.newRoot(NavTarget.RoomAliasError(i.roomAlias)) + } + .onSuccess { + subscribeToRoomInfoFlow(it) + } + } + is RoomIdOrAlias.Id -> { + subscribeToRoomInfoFlow(i.roomId) + } + } + } + } + + private fun subscribeToRoomInfoFlow(roomId: RoomId) { client.getRoomInfoFlow( - inputs.roomIdOrAlias + roomId ).onEach { roomInfo -> Timber.d("Room membership: ${roomInfo.map { it.currentUserMembership }}") val info = roomInfo.getOrNull() if (info?.currentUserMembership == CurrentUserMembership.JOINED) { - backstack.newRoot(NavTarget.JoinedRoom(info.id)) - // When leaving the room from this session only, navigate up. - roomMembershipJob?.cancel() - roomMembershipJob = roomMembershipObserver.updates - .filter { update -> update.roomId == info.id && !update.isUserInRoom } - .onEach { - navigateUp() - } - .launchIn(lifecycleScope) + backstack.newRoot(NavTarget.JoinedRoom(roomId)) } else { - backstack.newRoot(NavTarget.JoinRoom) + backstack.newRoot(NavTarget.JoinRoom(roomId)) } } .launchIn(lifecycleScope) + + // When leaving the room from this session only, navigate up. + roomMembershipObserver.updates + .filter { update -> update.roomId == roomId && !update.isUserInRoom } + .onEach { + navigateUp() + } + .launchIn(lifecycleScope) } override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { NavTarget.Loading -> loadingNode(buildContext) - NavTarget.JoinRoom -> { - val inputs = JoinRoomEntryPoint.Inputs(inputs.roomIdOrAlias, roomDescription = inputs.roomDescription) + is NavTarget.JoinRoom -> { + val inputs = JoinRoomEntryPoint.Inputs( + roomId = navTarget.roomId, + roomIdOrAlias = inputs.roomIdOrAlias, + roomDescription = inputs.roomDescription, + ) joinRoomEntryPoint.createNode(this, buildContext, inputs) } is NavTarget.JoinedRoom -> { @@ -131,6 +162,7 @@ class RoomFlowNode @AssistedInject constructor( val inputs = JoinedRoomFlowNode.Inputs(navTarget.roomId, initialElement = inputs.initialElement) createNode(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback) } + is NavTarget.RoomAliasError -> roomAliasErrorNode(buildContext, navTarget.roomAlias) } } @@ -140,6 +172,15 @@ class RoomFlowNode @AssistedInject constructor( } } + private fun roomAliasErrorNode(buildContext: BuildContext, roomAlias: RoomAlias) = node(buildContext) { + Box(modifier = it.fillMaxSize(), contentAlignment = Alignment.Center) { + AsyncFailure( + throwable = Exception("Unable to resolve alias ${roomAlias.value}"), + onRetry = { resolveRoomId() }, + ) + } + } + @Composable override fun View(modifier: Modifier) { BackstackView(transitionHandler = JumpToEndTransitionHandler()) diff --git a/features/joinroom/api/src/main/kotlin/io/element/android/features/joinroom/api/JoinRoomEntryPoint.kt b/features/joinroom/api/src/main/kotlin/io/element/android/features/joinroom/api/JoinRoomEntryPoint.kt index 0986af81d3..d62a9819c9 100644 --- a/features/joinroom/api/src/main/kotlin/io/element/android/features/joinroom/api/JoinRoomEntryPoint.kt +++ b/features/joinroom/api/src/main/kotlin/io/element/android/features/joinroom/api/JoinRoomEntryPoint.kt @@ -21,6 +21,7 @@ import com.bumble.appyx.core.node.Node import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.FeatureEntryPoint import io.element.android.libraries.architecture.NodeInputs +import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import java.util.Optional @@ -28,6 +29,7 @@ interface JoinRoomEntryPoint : FeatureEntryPoint { fun createNode(parentNode: Node, buildContext: BuildContext, inputs: Inputs): Node data class Inputs( + val roomId: RoomId, val roomIdOrAlias: RoomIdOrAlias, val roomDescription: Optional, ) : NodeInputs diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt index 516c789079..d83a5f4b20 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt @@ -37,7 +37,11 @@ class JoinRoomNode @AssistedInject constructor( private val acceptDeclineInviteView: AcceptDeclineInviteView, ) : Node(buildContext, plugins = plugins) { private val inputs: JoinRoomEntryPoint.Inputs = inputs() - private val presenter = presenterFactory.create(inputs.roomIdOrAlias, inputs.roomDescription) + private val presenter = presenterFactory.create( + inputs.roomId, + inputs.roomIdOrAlias, + inputs.roomDescription, + ) @Composable override fun View(modifier: Modifier) { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 818857c69a..7bc0f0facf 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -30,6 +30,7 @@ import io.element.android.features.invite.api.response.InviteData import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo @@ -38,19 +39,24 @@ import kotlinx.coroutines.launch import java.util.Optional class JoinRoomPresenter @AssistedInject constructor( + @Assisted private val roomId: RoomId, @Assisted private val roomIdOrAlias: RoomIdOrAlias, @Assisted private val roomDescription: Optional, private val matrixClient: MatrixClient, private val acceptDeclineInvitePresenter: Presenter, ) : Presenter { interface Factory { - fun create(roomIdOrAlias: RoomIdOrAlias, roomDescription: Optional): JoinRoomPresenter + fun create( + roomId: RoomId, + roomIdOrAlias: RoomIdOrAlias, + roomDescription: Optional, + ): JoinRoomPresenter } @Composable override fun present(): JoinRoomState { val coroutineScope = rememberCoroutineScope() - val roomInfo by matrixClient.getRoomInfoFlow(roomIdOrAlias).collectAsState(initial = Optional.empty()) + val roomInfo by matrixClient.getRoomInfoFlow(roomId).collectAsState(initial = Optional.empty()) val contentState by produceState(initialValue = ContentState.Loading(roomIdOrAlias), key1 = roomInfo) { value = when { roomInfo.isPresent -> { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt index 0bce71b885..3a9e0aec48 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt @@ -25,6 +25,7 @@ import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import java.util.Optional @@ -37,8 +38,13 @@ object JoinRoomModule { acceptDeclineInvitePresenter: Presenter, ): JoinRoomPresenter.Factory { return object : JoinRoomPresenter.Factory { - override fun create(roomIdOrAlias: RoomIdOrAlias, roomDescription: Optional): JoinRoomPresenter { + override fun create( + roomId: RoomId, + roomIdOrAlias: RoomIdOrAlias, + roomDescription: Optional, + ): JoinRoomPresenter { return JoinRoomPresenter( + roomId = roomId, roomIdOrAlias = roomIdOrAlias, roomDescription = roomDescription, matrixClient = client, diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index e61dd18aad..543a8ad9d7 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -23,7 +23,9 @@ import io.element.android.features.invite.api.response.anAcceptDeclineInviteStat import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient +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.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME @@ -49,7 +51,7 @@ class JoinRoomPresenterTest { val presenter = createJoinRoomPresenter() presenter.test { awaitItem().also { state -> - assertThat(state.contentState).isEqualTo(ContentState.Loading(A_ROOM_ID)) + assertThat(state.contentState).isEqualTo(ContentState.Loading(A_ROOM_ID.toRoomIdOrAlias())) assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Unknown) assertThat(state.acceptDeclineInviteState).isEqualTo(anAcceptDeclineInviteState()) } @@ -245,6 +247,7 @@ class JoinRoomPresenterTest { ): JoinRoomPresenter { return JoinRoomPresenter( roomId = roomId, + roomIdOrAlias = roomId.toRoomIdOrAlias(), roomDescription = roomDescription, matrixClient = matrixClient, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter @@ -255,7 +258,7 @@ class JoinRoomPresenterTest { roomId: RoomId = A_ROOM_ID, name: String? = A_ROOM_NAME, topic: String? = "A room about something", - alias: String? = "#alias:matrix.org", + alias: RoomAlias? = RoomAlias("#alias:matrix.org"), avatarUrl: String? = null, joinRule: RoomDescription.JoinRule = RoomDescription.JoinRule.UNKNOWN, numberOfMembers: Long = 2L diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index e6bbee4f9a..ac2a00dbdc 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -95,7 +95,7 @@ interface MatrixClient : Closeable { suspend fun getAccountManagementUrl(action: AccountManagementAction?): Result suspend fun uploadMedia(mimeType: String, data: ByteArray, progressCallback: ProgressCallback?): Result fun roomMembershipObserver(): RoomMembershipObserver - fun getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias): Flow> + fun getRoomInfoFlow(roomId: RoomId): Flow> fun isMe(userId: UserId?) = userId == sessionId diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index adc96d0b84..48683d77ba 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -562,33 +562,18 @@ class RustMatrixClient( override fun roomMembershipObserver(): RoomMembershipObserver = roomMembershipObserver - override fun getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias): Flow> { + override fun getRoomInfoFlow(roomId: RoomId): Flow> { return flow { - val roomId = when (roomIdOrAlias) { - is RoomIdOrAlias.Alias -> { - resolveRoomAlias(roomIdOrAlias.roomAlias) - .onFailure { - // TODO Get a way to emit an error - Timber.e("Unable to resolve room alias ${roomIdOrAlias.roomAlias}") - emit(Optional.empty()) - return@flow - } - .getOrNull() - } - is RoomIdOrAlias.Id -> roomIdOrAlias.roomId + var room = getRoom(roomId) + if (room == null) { + emit(Optional.empty()) + awaitRoom(roomId, INFINITE) + room = getRoom(roomId) } - if (roomId != null) { - var room = getRoom(roomId) - if (room == null) { - emit(Optional.empty()) - awaitRoom(roomId, INFINITE) - room = getRoom(roomId) - } - room?.use { - room.roomInfoFlow - .map { roomInfo -> Optional.of(roomInfo) } - .collect(this) - } + room?.use { + room.roomInfoFlow + .map { roomInfo -> Optional.of(roomInfo) } + .collect(this) } }.distinctUntilChanged() } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 1fc51cda94..42557db1dd 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -107,7 +107,7 @@ class FakeMatrixClient( Result.success(it) } - var getRoomInfoFlowLambda = { _: RoomIdOrAlias -> + var getRoomInfoFlowLambda = { _: RoomId -> flowOf>(Optional.empty()) } @@ -293,5 +293,5 @@ class FakeMatrixClient( return Result.success(visitedRoomsId) } - override fun getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias) = getRoomInfoFlowLambda(roomIdOrAlias) + override fun getRoomInfoFlow(roomId: RoomId) = getRoomInfoFlowLambda(roomId) } From b1b5c563c72e5ca157b6662c93dbe74e811970e8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 16:53:05 +0200 Subject: [PATCH 036/289] Introduce RoomAliasResolverNode with error and retry handling. --- .../android/appnav/room/RoomFlowNode.kt | 55 ++--- .../appnav/room/resolver/ResolveRoomModule.kt | 42 ++++ .../room/resolver/RoomAliasResolverEvents.kt | 21 ++ .../room/resolver/RoomAliasResolverNode.kt | 68 ++++++ .../resolver/RoomAliasResolverPresenter.kt | 72 ++++++ .../room/resolver/RoomAliasResolverState.kt | 29 +++ .../RoomAliasResolverStateProvider.kt | 47 ++++ .../room/resolver/RoomAliasResolverView.kt | 205 ++++++++++++++++++ .../features/messages/impl/MessagesNode.kt | 1 + 9 files changed, 509 insertions(+), 31 deletions(-) create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/room/resolver/ResolveRoomModule.kt create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverEvents.kt create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverNode.kt create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenter.kt create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverState.kt create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverStateProvider.kt create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverView.kt diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index a752920800..d0fc830892 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -36,6 +36,7 @@ import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.room.joined.JoinedRoomFlowNode import io.element.android.appnav.room.joined.JoinedRoomLoadedFlowNode +import io.element.android.appnav.room.resolver.RoomAliasResolverNode import io.element.android.features.joinroom.api.JoinRoomEntryPoint import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.BackstackView @@ -43,7 +44,6 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.designsystem.components.async.AsyncFailure import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient @@ -89,10 +89,10 @@ class RoomFlowNode @AssistedInject constructor( data object Loading : NavTarget @Parcelize - data class JoinRoom(val roomId: RoomId) : NavTarget + data class Resolving(val roomAlias: RoomAlias) : NavTarget @Parcelize - data class RoomAliasError(val roomAlias: RoomAlias) : NavTarget + data class JoinRoom(val roomId: RoomId) : NavTarget @Parcelize data class JoinedRoom(val roomId: RoomId) : NavTarget @@ -107,14 +107,7 @@ class RoomFlowNode @AssistedInject constructor( lifecycleScope.launch { when (val i = inputs.roomIdOrAlias) { is RoomIdOrAlias.Alias -> { - client.resolveRoomAlias(i.roomAlias) - .onFailure { - Timber.e(it, "Failed to resolve room alias") - backstack.newRoot(NavTarget.RoomAliasError(i.roomAlias)) - } - .onSuccess { - subscribeToRoomInfoFlow(it) - } + backstack.newRoot(NavTarget.Resolving(i.roomAlias)) } is RoomIdOrAlias.Id -> { subscribeToRoomInfoFlow(i.roomId) @@ -125,16 +118,17 @@ class RoomFlowNode @AssistedInject constructor( private fun subscribeToRoomInfoFlow(roomId: RoomId) { client.getRoomInfoFlow( - roomId - ).onEach { roomInfo -> - Timber.d("Room membership: ${roomInfo.map { it.currentUserMembership }}") - val info = roomInfo.getOrNull() - if (info?.currentUserMembership == CurrentUserMembership.JOINED) { - backstack.newRoot(NavTarget.JoinedRoom(roomId)) - } else { - backstack.newRoot(NavTarget.JoinRoom(roomId)) + roomId = roomId + ) + .onEach { roomInfo -> + Timber.d("Room membership: ${roomInfo.map { it.currentUserMembership }}") + val info = roomInfo.getOrNull() + if (info?.currentUserMembership == CurrentUserMembership.JOINED) { + backstack.newRoot(NavTarget.JoinedRoom(roomId)) + } else { + backstack.newRoot(NavTarget.JoinRoom(roomId)) + } } - } .launchIn(lifecycleScope) // When leaving the room from this session only, navigate up. @@ -148,7 +142,16 @@ class RoomFlowNode @AssistedInject constructor( override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { - NavTarget.Loading -> loadingNode(buildContext) + is NavTarget.Loading -> loadingNode(buildContext) + is NavTarget.Resolving -> { + val callback = object : RoomAliasResolverNode.Callback { + override fun onAliasResolved(roomId: RoomId) { + backstack.newRoot(NavTarget.JoinRoom(roomId)) + } + } + val params = RoomAliasResolverNode.Inputs(navTarget.roomAlias) + createNode(buildContext, listOf(callback, params)) + } is NavTarget.JoinRoom -> { val inputs = JoinRoomEntryPoint.Inputs( roomId = navTarget.roomId, @@ -162,7 +165,6 @@ class RoomFlowNode @AssistedInject constructor( val inputs = JoinedRoomFlowNode.Inputs(navTarget.roomId, initialElement = inputs.initialElement) createNode(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback) } - is NavTarget.RoomAliasError -> roomAliasErrorNode(buildContext, navTarget.roomAlias) } } @@ -172,15 +174,6 @@ class RoomFlowNode @AssistedInject constructor( } } - private fun roomAliasErrorNode(buildContext: BuildContext, roomAlias: RoomAlias) = node(buildContext) { - Box(modifier = it.fillMaxSize(), contentAlignment = Alignment.Center) { - AsyncFailure( - throwable = Exception("Unable to resolve alias ${roomAlias.value}"), - onRetry = { resolveRoomId() }, - ) - } - } - @Composable override fun View(modifier: Modifier) { BackstackView(transitionHandler = JumpToEndTransitionHandler()) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/ResolveRoomModule.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/ResolveRoomModule.kt new file mode 100644 index 0000000000..687fefc5c5 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/ResolveRoomModule.kt @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.room.resolver + +import com.squareup.anvil.annotations.ContributesTo +import dagger.Module +import dagger.Provides +import io.element.android.libraries.di.SessionScope +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.RoomAlias + +@Module +@ContributesTo(SessionScope::class) +object ResolveRoomModule { + @Provides + fun providesJoinRoomPresenterFactory( + client: MatrixClient, + ): RoomAliasResolverPresenter.Factory { + return object : RoomAliasResolverPresenter.Factory { + override fun create(roomAlias: RoomAlias): RoomAliasResolverPresenter { + return RoomAliasResolverPresenter( + roomAlias = roomAlias, + matrixClient = client, + ) + } + } + } +} diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverEvents.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverEvents.kt new file mode 100644 index 0000000000..1eb3c8ffe9 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverEvents.kt @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.room.resolver + +sealed interface RoomAliasResolverEvents { + data object Retry : RoomAliasResolverEvents +} diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverNode.kt new file mode 100644 index 0000000000..c429ec1a95 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverNode.kt @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.room.resolver + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.bumble.appyx.core.modality.BuildContext +import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin +import com.bumble.appyx.core.plugin.plugins +import dagger.assisted.Assisted +import dagger.assisted.AssistedInject +import io.element.android.anvilannotations.ContributesNode +import io.element.android.libraries.architecture.NodeInputs +import io.element.android.libraries.architecture.inputs +import io.element.android.libraries.di.SessionScope +import io.element.android.libraries.matrix.api.core.RoomAlias +import io.element.android.libraries.matrix.api.core.RoomId + +@ContributesNode(SessionScope::class) +class RoomAliasResolverNode @AssistedInject constructor( + @Assisted buildContext: BuildContext, + @Assisted plugins: List, + presenterFactory: RoomAliasResolverPresenter.Factory, +) : Node(buildContext, plugins = plugins) { + data class Inputs( + val roomAlias: RoomAlias + ) : NodeInputs + + private val inputs = inputs() + + private val presenter = presenterFactory.create( + inputs.roomAlias + ) + + interface Callback : Plugin { + fun onAliasResolved(roomId: RoomId) + } + + private fun onAliasResolved(roomId: RoomId) { + plugins().forEach { it.onAliasResolved(roomId) } + } + + @Composable + override fun View(modifier: Modifier) { + val state = presenter.present() + RoomAliasResolverView( + state = state, + onAliasResolved = ::onAliasResolved, + onBackPressed = ::navigateUp, + modifier = modifier + ) + } +} diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenter.kt new file mode 100644 index 0000000000..5e9e3382d5 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenter.kt @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.room.resolver + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import dagger.assisted.Assisted +import dagger.assisted.AssistedInject +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.architecture.runCatchingUpdatingState +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.RoomAlias +import io.element.android.libraries.matrix.api.core.RoomId +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +class RoomAliasResolverPresenter @AssistedInject constructor( + @Assisted private val roomAlias: RoomAlias, + private val matrixClient: MatrixClient, +) : Presenter { + interface Factory { + fun create( + roomAlias: RoomAlias, + ): RoomAliasResolverPresenter + } + + @Composable + override fun present(): RoomAliasResolverState { + val coroutineScope = rememberCoroutineScope() + val resolveState: MutableState> = remember { mutableStateOf(AsyncData.Uninitialized) } + LaunchedEffect(Unit) { + resolveAlias(resolveState) + } + + fun handleEvents(event: RoomAliasResolverEvents) { + when (event) { + RoomAliasResolverEvents.Retry -> coroutineScope.resolveAlias(resolveState) + } + } + + return RoomAliasResolverState( + roomAlias = roomAlias, + resolveState = resolveState.value, + eventSink = ::handleEvents + ) + } + + private fun CoroutineScope.resolveAlias(resolveState: MutableState>) = launch { + suspend { + matrixClient.resolveRoomAlias(roomAlias).getOrThrow() + }.runCatchingUpdatingState(resolveState) + } +} diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverState.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverState.kt new file mode 100644 index 0000000000..4f800a76cd --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverState.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.room.resolver + +import androidx.compose.runtime.Immutable +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.matrix.api.core.RoomAlias +import io.element.android.libraries.matrix.api.core.RoomId + +@Immutable +data class RoomAliasResolverState( + val roomAlias: RoomAlias, + val resolveState: AsyncData, + val eventSink: (RoomAliasResolverEvents) -> Unit +) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverStateProvider.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverStateProvider.kt new file mode 100644 index 0000000000..9584bb21b8 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverStateProvider.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.room.resolver + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.matrix.api.core.RoomAlias +import io.element.android.libraries.matrix.api.core.RoomId + +open class RoomAliasResolverStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aRoomAliasResolverState(), + aRoomAliasResolverState( + resolveState = AsyncData.Loading(), + ), + aRoomAliasResolverState( + resolveState = AsyncData.Failure(Exception("Error")), + ), + ) +} + +fun aRoomAliasResolverState( + roomAlias: RoomAlias = A_ROOM_ALIAS, + resolveState: AsyncData = AsyncData.Uninitialized, + eventSink: (RoomAliasResolverEvents) -> Unit = {} +) = RoomAliasResolverState( + roomAlias = roomAlias, + resolveState = resolveState, + eventSink = eventSink, +) + +private val A_ROOM_ALIAS = RoomAlias("#exa:matrix.org") diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverView.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverView.kt new file mode 100644 index 0000000000..e208119a16 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverView.kt @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.room.resolver + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom +import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage +import io.element.android.libraries.designsystem.components.avatar.AvatarSize +import io.element.android.libraries.designsystem.components.button.BackButton +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.theme.components.Button +import io.element.android.libraries.designsystem.theme.components.ButtonSize +import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator +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.core.RoomId +import io.element.android.libraries.ui.strings.CommonStrings + +@Composable +fun RoomAliasResolverView( + state: RoomAliasResolverState, + onBackPressed: () -> Unit, + onAliasResolved: (RoomId) -> Unit, + modifier: Modifier = Modifier, +) { + val latestOnAliasResolved by rememberUpdatedState(onAliasResolved) + LaunchedEffect(state.resolveState) { + if (state.resolveState is AsyncData.Success) { + latestOnAliasResolved(state.resolveState.data) + } + } + + HeaderFooterPage( + modifier = modifier, + paddingValues = PaddingValues(16.dp), + topBar = { + RoomAliasResolverTopBar(onBackClicked = onBackPressed) + }, + content = { + RoomAliasResolverContent(state = state) + }, + footer = { + RoomAliasResolverFooter( + state = state, + ) + } + ) +} + +@Composable +private fun RoomAliasResolverFooter( + state: RoomAliasResolverState, + modifier: Modifier = Modifier, +) { + when (state.resolveState) { + is AsyncData.Failure -> { + Button( + text = stringResource(CommonStrings.action_retry), + onClick = { + state.eventSink(RoomAliasResolverEvents.Retry) + }, + modifier = modifier.fillMaxWidth(), + size = ButtonSize.Medium, + ) + } + is AsyncData.Loading -> { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + CircularProgressIndicator() + } + } + AsyncData.Uninitialized, + is AsyncData.Success -> Unit + } +} + +@Composable +private fun RoomAliasResolverContent( + state: RoomAliasResolverState, + modifier: Modifier = Modifier, +) { + ContentScaffold( + modifier = modifier, + avatar = { + PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) + }, + title = { + }, + subtitle = { + Title(state.roomAlias.value) + }, + description = { + if (state.resolveState.isFailure()) { + Text( + text = "Failed to resolve room alias", + textAlign = TextAlign.Center, + color = MaterialTheme.colorScheme.error, + ) + } + }, + memberCount = { + } + ) +} + +@Composable +private fun ContentScaffold( + avatar: @Composable () -> Unit, + title: @Composable () -> Unit, + subtitle: @Composable () -> Unit, + modifier: Modifier = Modifier, + description: @Composable (() -> Unit)? = null, + memberCount: @Composable (() -> Unit)? = null, +) { + Column( + modifier = modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + avatar() + Spacer(modifier = Modifier.height(16.dp)) + title() + Spacer(modifier = Modifier.height(8.dp)) + subtitle() + Spacer(modifier = Modifier.height(8.dp)) + if (memberCount != null) { + memberCount() + } + Spacer(modifier = Modifier.height(8.dp)) + if (description != null) { + description() + } + Spacer(modifier = Modifier.height(24.dp)) + } +} + +@Composable +private fun Title(title: String, modifier: Modifier = Modifier) { + Text( + modifier = modifier, + text = title, + style = ElementTheme.typography.fontHeadingMdBold, + textAlign = TextAlign.Center, + color = ElementTheme.colors.textPrimary, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun RoomAliasResolverTopBar( + onBackClicked: () -> Unit, +) { + TopAppBar( + navigationIcon = { + BackButton(onClick = onBackClicked) + }, + title = {}, + ) +} + +@PreviewLightDark +@Composable +internal fun RoomAliasResolverViewPreview(@PreviewParameter(RoomAliasResolverStateProvider::class) state: RoomAliasResolverState) = ElementPreview { + RoomAliasResolverView( + state = state, + onAliasResolved = { }, + onBackPressed = { } + ) +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index b87e1cb343..b7958f792c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -124,6 +124,7 @@ class MessagesNode @AssistedInject constructor( } } is PermalinkData.RoomLink -> { + // TODO Handle click on current Room callback?.onPermalinkClicked(permalink) } is PermalinkData.FallbackLink, From 6c8c14f9ff79e5cac81650f7df766cb26b525093 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 17:55:33 +0200 Subject: [PATCH 037/289] Add Retry on Join room node. --- .../features/joinroom/impl/JoinRoomEvents.kt | 1 + .../joinroom/impl/JoinRoomPresenter.kt | 29 ++++- .../features/joinroom/impl/JoinRoomState.kt | 1 + .../joinroom/impl/JoinRoomStateProvider.kt | 17 +++ .../features/joinroom/impl/JoinRoomView.kt | 104 ++++++++++++------ 5 files changed, 116 insertions(+), 36 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt index 999030cd50..2dddb22e13 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt @@ -17,6 +17,7 @@ package io.element.android.features.joinroom.impl sealed interface JoinRoomEvents { + data object Retry : JoinRoomEvents data object JoinRoom : JoinRoomEvents data object AcceptInvite : JoinRoomEvents data object DeclineInvite : JoinRoomEvents diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 7bc0f0facf..504294037f 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -20,8 +20,11 @@ import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.produceState +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents @@ -32,6 +35,7 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias +import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview @@ -56,8 +60,13 @@ class JoinRoomPresenter @AssistedInject constructor( @Composable override fun present(): JoinRoomState { val coroutineScope = rememberCoroutineScope() + var retryCount by remember { mutableIntStateOf(0) } val roomInfo by matrixClient.getRoomInfoFlow(roomId).collectAsState(initial = Optional.empty()) - val contentState by produceState(initialValue = ContentState.Loading(roomIdOrAlias), key1 = roomInfo) { + val contentState by produceState( + initialValue = ContentState.Loading(roomIdOrAlias), + key1 = roomInfo, + key2 = retryCount, + ) { value = when { roomInfo.isPresent -> { roomInfo.get().toContentState() @@ -67,10 +76,17 @@ class JoinRoomPresenter @AssistedInject constructor( } else -> { coroutineScope.launch { - val result = matrixClient.getRoomPreview(roomIdOrAlias) - value = result.getOrNull() - ?.toContentState() - ?: ContentState.UnknownRoom(roomIdOrAlias) + val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) + value = result.fold( + onSuccess = { it.toContentState() }, + onFailure = { throwable -> + if (throwable.message?.contains("403") == true) { + ContentState.UnknownRoom(roomIdOrAlias) + } else { + ContentState.Failure(roomIdOrAlias, throwable) + } + } + ) } ContentState.Loading(roomIdOrAlias) } @@ -93,6 +109,9 @@ class JoinRoomPresenter @AssistedInject constructor( AcceptDeclineInviteEvents.DeclineInvite(inviteData) ) } + JoinRoomEvents.Retry -> { + retryCount++ + } } } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index bf57a0fdcf..4d91135e9a 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -38,6 +38,7 @@ data class JoinRoomState( sealed interface ContentState { data class Loading(val roomIdOrAlias: RoomIdOrAlias) : ContentState + data class Failure(val roomIdOrAlias: RoomIdOrAlias, val error: Throwable) : ContentState data class UnknownRoom(val roomIdOrAlias: RoomIdOrAlias) : ContentState data class Loaded( val roomId: RoomId, diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 3eea5e723b..7c34a05c6b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -21,6 +21,7 @@ import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState 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.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias open class JoinRoomStateProvider : PreviewParameterProvider { @@ -41,9 +42,24 @@ open class JoinRoomStateProvider : PreviewParameterProvider { aJoinRoomState( contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited) ), + aJoinRoomState( + contentState = aFailureContentState() + ), + aJoinRoomState( + contentState = aFailureContentState(roomIdOrAlias = A_ROOM_ALIAS.toRoomIdOrAlias()) + ), ) } +fun aFailureContentState( + roomIdOrAlias: RoomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias() +): ContentState { + return ContentState.Failure( + roomIdOrAlias = roomIdOrAlias, + error = Exception("Error"), + ) +} + fun anUnknownContentState(roomId: RoomId = A_ROOM_ID) = ContentState.UnknownRoom(roomId.toRoomIdOrAlias()) fun aLoadingContentState(roomId: RoomId = A_ROOM_ID) = ContentState.Loading(roomId.toRoomIdOrAlias()) @@ -79,3 +95,4 @@ fun aJoinRoomState( ) private val A_ROOM_ID = RoomId("!exa:matrix.org") +private val A_ROOM_ALIAS = RoomAlias("#exa:matrix.org") diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 31f065c0e5..74c78d09a5 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -28,6 +28,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -52,6 +53,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.OutlinedButton 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.core.RoomIdOrAlias import io.element.android.libraries.ui.strings.CommonStrings @Composable @@ -71,7 +73,7 @@ fun JoinRoomView( }, footer = { JoinRoomFooter( - joinAuthorisationStatus = state.joinAuthorisationStatus, + state = state, onAcceptInvite = { state.eventSink(JoinRoomEvents.AcceptInvite) }, @@ -81,6 +83,9 @@ fun JoinRoomView( onJoinRoom = { state.eventSink(JoinRoomEvents.JoinRoom) }, + onRetry = { + state.eventSink(JoinRoomEvents.Retry) + } ) } ) @@ -88,46 +93,57 @@ fun JoinRoomView( @Composable private fun JoinRoomFooter( - joinAuthorisationStatus: JoinAuthorisationStatus, + state: JoinRoomState, onAcceptInvite: () -> Unit, onDeclineInvite: () -> Unit, onJoinRoom: () -> Unit, + onRetry: () -> Unit, modifier: Modifier = Modifier, ) { - when (joinAuthorisationStatus) { - JoinAuthorisationStatus.IsInvited -> { - ButtonRowMolecule(modifier = modifier, horizontalArrangement = Arrangement.spacedBy(20.dp)) { - OutlinedButton( - text = stringResource(CommonStrings.action_decline), - onClick = onDeclineInvite, - modifier = Modifier.weight(1f), - size = ButtonSize.Medium, - ) + if (state.contentState is ContentState.Failure) { + Button( + text = stringResource(CommonStrings.action_retry), + onClick = onRetry, + modifier = modifier.fillMaxWidth(), + size = ButtonSize.Medium, + ) + } else { + val joinAuthorisationStatus = state.joinAuthorisationStatus + when (joinAuthorisationStatus) { + JoinAuthorisationStatus.IsInvited -> { + ButtonRowMolecule(modifier = modifier, horizontalArrangement = Arrangement.spacedBy(20.dp)) { + OutlinedButton( + text = stringResource(CommonStrings.action_decline), + onClick = onDeclineInvite, + modifier = Modifier.weight(1f), + size = ButtonSize.Medium, + ) + Button( + text = stringResource(CommonStrings.action_accept), + onClick = onAcceptInvite, + modifier = Modifier.weight(1f), + size = ButtonSize.Medium, + ) + } + } + JoinAuthorisationStatus.CanJoin -> { Button( - text = stringResource(CommonStrings.action_accept), - onClick = onAcceptInvite, - modifier = Modifier.weight(1f), + text = stringResource(R.string.screen_join_room_join_action), + onClick = onJoinRoom, + modifier = modifier.fillMaxWidth(), size = ButtonSize.Medium, ) } + JoinAuthorisationStatus.CanKnock -> { + Button( + text = stringResource(R.string.screen_join_room_knock_action), + onClick = onJoinRoom, + modifier = modifier.fillMaxWidth(), + size = ButtonSize.Medium, + ) + } + JoinAuthorisationStatus.Unknown -> Unit } - JoinAuthorisationStatus.CanJoin -> { - Button( - text = stringResource(R.string.screen_join_room_join_action), - onClick = onJoinRoom, - modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, - ) - } - JoinAuthorisationStatus.CanKnock -> { - Button( - text = stringResource(R.string.screen_join_room_knock_action), - onClick = onJoinRoom, - modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, - ) - } - JoinAuthorisationStatus.Unknown -> Unit } } @@ -187,6 +203,32 @@ private fun JoinRoomContent( }, ) } + is ContentState.Failure -> { + ContentScaffold( + modifier = modifier, + avatar = { + PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) + }, + title = { + when (contentState.roomIdOrAlias) { + is RoomIdOrAlias.Alias -> { + Title(contentState.roomIdOrAlias.identifier) + } + is RoomIdOrAlias.Id -> { + PlaceholderAtom(width = 200.dp, height = 22.dp) + } + } + }, + subtitle = { + Text( + text = "Failed to get information about the room", + textAlign = TextAlign.Center, + color = MaterialTheme.colorScheme.error, + ) + }, + ) + } + } } From d057183d3155d13abd342e353a5c5388282e00a5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Apr 2024 17:57:52 +0200 Subject: [PATCH 038/289] FIXME --- .../main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 2e71759269..960b393266 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -277,7 +277,7 @@ class LoggedInFlowNode @AssistedInject constructor( coroutineScope.launch { when (data) { is PermalinkData.UserLink -> { - // FIXME: Add a user profile screen. + // FIXME Add a user profile screen. Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") } is PermalinkData.RoomLink -> { From 96203824ac020f8adc5bb345517097ba94414fd3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 10:32:10 +0200 Subject: [PATCH 039/289] Handle navigation to the same room. --- .../features/messages/impl/MessagesNode.kt | 22 ++++++++++-- .../matrix/api/room/navigation/Navigation.kt | 34 +++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/navigation/Navigation.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index b7958f792c..658149489c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -34,8 +34,10 @@ import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPr import io.element.android.features.messages.impl.timeline.di.TimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.androidutils.system.openUrlInExternalApp +import io.element.android.libraries.androidutils.system.toast import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.core.bool.orFalse +import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId @@ -43,6 +45,7 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.room.navigation.isSameRoom import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.mediaplayer.api.MediaPlayer @@ -60,6 +63,8 @@ class MessagesNode @AssistedInject constructor( private val timelineItemPresenterFactories: TimelineItemPresenterFactories, private val mediaPlayer: MediaPlayer, private val permalinkParser: PermalinkParser, + @ApplicationContext + private val context: Context, ) : Node(buildContext, plugins = plugins), MessagesNavigator { private val presenter = presenterFactory.create(this) private val callback = plugins().firstOrNull() @@ -124,8 +129,7 @@ class MessagesNode @AssistedInject constructor( } } is PermalinkData.RoomLink -> { - // TODO Handle click on current Room - callback?.onPermalinkClicked(permalink) + handleRoomLinkClicked(permalink) } is PermalinkData.FallbackLink, is PermalinkData.RoomEmailInviteLink -> { @@ -134,6 +138,20 @@ class MessagesNode @AssistedInject constructor( } } + private fun handleRoomLinkClicked(roomLink: PermalinkData.RoomLink) { + if (room.isSameRoom(roomLink.roomIdOrAlias)) { + if (roomLink.eventId != null) { + // TODO Handle navigation to the Event + context.toast("TODO Handle navigation to the Event ${roomLink.eventId}") + } else { + // Click on the same room, ignore + context.toast("Already viewing this room!") + } + } else { + callback?.onPermalinkClicked(roomLink) + } + } + override fun onShowEventDebugInfoClicked(eventId: EventId?, debugInfo: TimelineItemDebugInfo) { callback?.onShowEventDebugInfoClicked(eventId, debugInfo) } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/navigation/Navigation.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/navigation/Navigation.kt new file mode 100644 index 0000000000..3bc46df4fc --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/navigation/Navigation.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.room.navigation + +import io.element.android.libraries.matrix.api.core.RoomIdOrAlias +import io.element.android.libraries.matrix.api.room.MatrixRoom + +/** + * Return true if the given roomIdOrAlias is the same room as this room. + */ +fun MatrixRoom.isSameRoom(roomIdOrAlias: RoomIdOrAlias): Boolean { + return when (roomIdOrAlias) { + is RoomIdOrAlias.Id -> { + roomIdOrAlias.roomId == roomId + } + is RoomIdOrAlias.Alias -> { + roomIdOrAlias.roomAlias == alias || roomIdOrAlias.roomAlias in alternativeAliases + } + } +} From b6e30833da8c99adcd729b2c77cc7561e87425dc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 10:59:11 +0200 Subject: [PATCH 040/289] Add name to call arguments. --- .../impl/room/member/RoomMemberMapper.kt | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) 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 492fdee814..32d19a3afb 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 @@ -25,16 +25,16 @@ import org.matrix.rustcomponents.sdk.RoomMember as RustRoomMember object RoomMemberMapper { fun map(roomMember: RustRoomMember): RoomMember = RoomMember( - UserId(roomMember.userId), - roomMember.displayName, - roomMember.avatarUrl, - mapMembership(roomMember.membership), - roomMember.isNameAmbiguous, - roomMember.powerLevel, - roomMember.normalizedPowerLevel, - roomMember.isIgnored, - mapRole(roomMember.suggestedRoleForPowerLevel), - ) + userId = UserId(roomMember.userId), + displayName = roomMember.displayName, + avatarUrl = roomMember.avatarUrl, + membership = mapMembership(roomMember.membership), + isNameAmbiguous = roomMember.isNameAmbiguous, + powerLevel = roomMember.powerLevel, + normalizedPowerLevel = roomMember.normalizedPowerLevel, + isIgnored = roomMember.isIgnored, + role = mapRole(roomMember.suggestedRoleForPowerLevel), + ) fun mapRole(role: RoomMemberRole): RoomMember.Role = when (role) { From b7d214fa5648cd151fe83129f6f21c227ca84a70 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 16:22:50 +0200 Subject: [PATCH 041/289] Update extension. --- .../io/element/android/features/messages/impl/MessagesNode.kt | 4 ++-- .../{navigation/Navigation.kt => alias/MatrixRoomAlias.kt} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/{navigation/Navigation.kt => alias/MatrixRoomAlias.kt} (89%) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 658149489c..357e68b3d2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -45,7 +45,7 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.room.navigation.isSameRoom +import io.element.android.libraries.matrix.api.room.alias.matches import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.mediaplayer.api.MediaPlayer @@ -139,7 +139,7 @@ class MessagesNode @AssistedInject constructor( } private fun handleRoomLinkClicked(roomLink: PermalinkData.RoomLink) { - if (room.isSameRoom(roomLink.roomIdOrAlias)) { + if (room.matches(roomLink.roomIdOrAlias)) { if (roomLink.eventId != null) { // TODO Handle navigation to the Event context.toast("TODO Handle navigation to the Event ${roomLink.eventId}") diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/navigation/Navigation.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/alias/MatrixRoomAlias.kt similarity index 89% rename from libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/navigation/Navigation.kt rename to libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/alias/MatrixRoomAlias.kt index 3bc46df4fc..6fb2246d1a 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/navigation/Navigation.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/alias/MatrixRoomAlias.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.matrix.api.room.navigation +package io.element.android.libraries.matrix.api.room.alias import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.room.MatrixRoom @@ -22,7 +22,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoom /** * Return true if the given roomIdOrAlias is the same room as this room. */ -fun MatrixRoom.isSameRoom(roomIdOrAlias: RoomIdOrAlias): Boolean { +fun MatrixRoom.matches(roomIdOrAlias: RoomIdOrAlias): Boolean { return when (roomIdOrAlias) { is RoomIdOrAlias.Id -> { roomIdOrAlias.roomId == roomId From 7a7fb2aa546195464e604f3f2b434e72face3b04 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 16:44:37 +0200 Subject: [PATCH 042/289] Comment out SDK usage. --- .../libraries/matrix/impl/RustMatrixClient.kt | 10 ++-- .../impl/room/preview/RoomPreviewMapper.kt | 47 ++++++++++--------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 48683d77ba..82619352c0 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -61,7 +61,7 @@ import io.element.android.libraries.matrix.impl.room.RoomContentForwarder import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber import io.element.android.libraries.matrix.impl.room.RustMatrixRoom import io.element.android.libraries.matrix.impl.room.map -import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper +// TODO import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper import io.element.android.libraries.matrix.impl.roomdirectory.RustRoomDirectoryService import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService @@ -466,13 +466,17 @@ class RustMatrixClient( override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = withContext(sessionDispatcher) { runCatching { - client.resolveRoomAlias(roomAlias.value).let(::RoomId) + // TODO Waiting for SDK to be released + throw Exception("Not implemented") + // client.resolveRoomAlias(roomAlias.value).let(::RoomId) } } override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result = withContext(sessionDispatcher) { runCatching { - client.getRoomPreview(roomIdOrAlias.identifier).let(RoomPreviewMapper::map) + // TODO Waiting for SDK to be released + throw Exception("Not implemented") + // client.getRoomPreview(roomIdOrAlias.identifier).let(RoomPreviewMapper::map) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt index 75286becda..0497d8aeff 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt @@ -16,26 +16,27 @@ package io.element.android.libraries.matrix.impl.room.preview -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.room.preview.RoomPreview -import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview - -object RoomPreviewMapper { - fun map(roomPreview: RustRoomPreview): RoomPreview { - return RoomPreview( - roomId = RoomId(roomPreview.roomId), - canonicalAlias = roomPreview.canonicalAlias?.let(::RoomAlias), - name = roomPreview.name, - topic = roomPreview.topic, - avatarUrl = roomPreview.avatarUrl, - numberOfJoinedMembers = roomPreview.numJoinedMembers.toLong(), - roomType = roomPreview.roomType, - isHistoryWorldReadable = roomPreview.isHistoryWorldReadable, - isJoined = roomPreview.isJoined, - isInvited = roomPreview.isInvited, - isPublic = roomPreview.isPublic, - canKnock = roomPreview.canKnock - ) - } -} +// TODO Restore +// 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.room.preview.RoomPreview +// import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview +// +// object RoomPreviewMapper { +// fun map(roomPreview: RustRoomPreview): RoomPreview { +// return RoomPreview( +// roomId = RoomId(roomPreview.roomId), +// canonicalAlias = roomPreview.canonicalAlias?.let(::RoomAlias), +// name = roomPreview.name, +// topic = roomPreview.topic, +// avatarUrl = roomPreview.avatarUrl, +// numberOfJoinedMembers = roomPreview.numJoinedMembers.toLong(), +// roomType = roomPreview.roomType, +// isHistoryWorldReadable = roomPreview.isHistoryWorldReadable, +// isJoined = roomPreview.isJoined, +// isInvited = roomPreview.isInvited, +// isPublic = roomPreview.isPublic, +// canKnock = roomPreview.canKnock +// ) +// } +// } From 33212a136ce85e651dff07b529cd3f5d53ebc037 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 16:51:38 +0200 Subject: [PATCH 043/289] Open any user permalink. --- .../android/features/messages/impl/MessagesNode.kt | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 357e68b3d2..37292f5e08 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -46,7 +46,6 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.alias.matches -import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.mediaplayer.api.MediaPlayer import io.element.android.services.analytics.api.AnalyticsService @@ -120,13 +119,9 @@ class MessagesNode @AssistedInject constructor( ) { when (val permalink = permalinkParser.parse(url)) { is PermalinkData.UserLink -> { - if (permalink.userId in room.membersStateFlow.value.roomMembers().orEmpty().map { it.userId }) { - // Open the room member profile - callback?.onUserDataClicked(permalink.userId) - } else { - // The user is not a member of the room - callback?.onPermalinkClicked(permalink) - } + // Open the room member profile, it will fallback to + // the user profile if the user is not in the room + callback?.onUserDataClicked(permalink.userId) } is PermalinkData.RoomLink -> { handleRoomLinkClicked(permalink) From 6a125bbb1b38a3249c8b48f3eff85a00b72782d0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 17:40:03 +0200 Subject: [PATCH 044/289] Add test on RoomAliasResolverPresenter --- .../RoomAliasResolverPresenterTest.kt | 94 +++++++++++++++++++ .../libraries/matrix/test/FakeMatrixClient.kt | 2 +- .../android/libraries/matrix/test/TestData.kt | 2 + 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 appnav/src/test/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenterTest.kt diff --git a/appnav/src/test/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenterTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenterTest.kt new file mode 100644 index 0000000000..79e44cd627 --- /dev/null +++ b/appnav/src/test/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenterTest.kt @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.room.resolver + +import app.cash.molecule.RecompositionMode +import app.cash.molecule.moleculeFlow +import app.cash.turbine.test +import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.RoomAlias +import io.element.android.libraries.matrix.test.AN_EXCEPTION +import io.element.android.libraries.matrix.test.A_ROOM_ALIAS +import io.element.android.libraries.matrix.test.A_ROOM_ID +import io.element.android.libraries.matrix.test.FakeMatrixClient +import io.element.android.tests.testutils.WarmUpRule +import kotlinx.coroutines.test.runTest +import org.junit.Rule +import org.junit.Test + +class RoomAliasResolverPresenterTest { + @get:Rule + val warmUpRule = WarmUpRule() + + @Test + fun `present - initial state`() = runTest { + val presenter = createPresenter() + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + assertThat(awaitItem().resolveState.isUninitialized()).isTrue() + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `present - resolve alias to roomId`() = runTest { + val client = FakeMatrixClient( + resolveRoomAliasResult = { Result.success(A_ROOM_ID) } + ) + val presenter = createPresenter(matrixClient = client) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + assertThat(awaitItem().resolveState.isUninitialized()).isTrue() + assertThat(awaitItem().resolveState.isLoading()).isTrue() + val resultState = awaitItem() + assertThat(resultState.roomAlias).isEqualTo(A_ROOM_ALIAS) + assertThat(resultState.resolveState.dataOrNull()).isEqualTo(A_ROOM_ID) + } + } + + @Test + fun `present - resolve alias error and retry`() = runTest { + val client = FakeMatrixClient( + resolveRoomAliasResult = { Result.failure(AN_EXCEPTION) } + ) + val presenter = createPresenter(matrixClient = client) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + assertThat(awaitItem().resolveState.isUninitialized()).isTrue() + assertThat(awaitItem().resolveState.isLoading()).isTrue() + val resultState = awaitItem() + assertThat(resultState.resolveState.errorOrNull()).isEqualTo(AN_EXCEPTION) + resultState.eventSink(RoomAliasResolverEvents.Retry) + val retryLoadingState = awaitItem() + assertThat(retryLoadingState.resolveState.isLoading()).isTrue() + val retryState = awaitItem() + assertThat(retryState.resolveState.errorOrNull()).isEqualTo(AN_EXCEPTION) + } + } + + private fun createPresenter( + roomAlias: RoomAlias = A_ROOM_ALIAS, + matrixClient: MatrixClient = FakeMatrixClient(), + ) = RoomAliasResolverPresenter( + roomAlias = roomAlias, + matrixClient = matrixClient, + ) +} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 42557db1dd..f53bea0fe7 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -281,7 +281,7 @@ class FakeMatrixClient( return Result.success(Unit) } - override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result { + override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = simulateLongTask { return resolveRoomAliasResult(roomAlias) } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/TestData.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/TestData.kt index ca55e6d514..96346574ce 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/TestData.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/TestData.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.test import io.element.android.libraries.matrix.api.auth.MatrixHomeServerDetails import io.element.android.libraries.matrix.api.core.EventId +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.core.SessionId import io.element.android.libraries.matrix.api.core.SpaceId @@ -50,6 +51,7 @@ val A_THREAD_ID = ThreadId("\$aThreadId") val A_THREAD_ID_2 = ThreadId("\$aThreadId2") val AN_EVENT_ID = EventId("\$anEventId") val AN_EVENT_ID_2 = EventId("\$anEventId2") +val A_ROOM_ALIAS = RoomAlias("#alias1:domain") val A_TRANSACTION_ID = TransactionId("aTransactionId") const val A_UNIQUE_ID = "aUniqueId" From 400299ceac64e179b80d30cd91c334185058c159 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 17:41:25 +0200 Subject: [PATCH 045/289] Format file. --- .../element/android/features/joinroom/impl/JoinRoomView.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 74c78d09a5..a22b114d08 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -228,7 +228,6 @@ private fun JoinRoomContent( }, ) } - } } @@ -301,9 +300,9 @@ private fun Description(description: String, modifier: Modifier = Modifier) { private fun MembersCount(memberCount: Long) { Row( modifier = Modifier - .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) - .widthIn(min = 48.dp) - .padding(all = 2.dp), + .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) + .widthIn(min = 48.dp) + .padding(all = 2.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(4.dp) ) { From 12b230594bb48eb7ba6421e9ad78ba2def1a9eb3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 17:58:12 +0200 Subject: [PATCH 046/289] Fix JoinRoomPresenterTest --- .../android/features/joinroom/impl/JoinRoomPresenterTest.kt | 1 + .../element/android/libraries/matrix/test/FakeMatrixClient.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 543a8ad9d7..9488e2f142 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -54,6 +54,7 @@ class JoinRoomPresenterTest { assertThat(state.contentState).isEqualTo(ContentState.Loading(A_ROOM_ID.toRoomIdOrAlias())) assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Unknown) assertThat(state.acceptDeclineInviteState).isEqualTo(anAcceptDeclineInviteState()) + cancelAndIgnoreRemainingEvents() } } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index f53bea0fe7..2e24139042 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -77,7 +77,7 @@ class FakeMatrixClient( private val roomDirectoryService: RoomDirectoryService = FakeRoomDirectoryService(), private val accountManagementUrlString: Result = Result.success(null), private val resolveRoomAliasResult: (RoomAlias) -> Result = { Result.success(A_ROOM_ID) }, - private val getRoomPreviewResult: (RoomIdOrAlias) -> Result = { TODO("Not implemented") }, + private val getRoomPreviewResult: (RoomIdOrAlias) -> Result = { Result.failure(AN_EXCEPTION) }, ) : MatrixClient { var setDisplayNameCalled: Boolean = false private set From 2eb545cd119b2e6d7a270d9f6870433485c4c13f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 18:06:56 +0200 Subject: [PATCH 047/289] Add test to JoinRoomPresenter to cover RoomPreview --- .../joinroom/impl/JoinRoomPresenterTest.kt | 106 ++++++++++++++++++ .../libraries/matrix/test/FakeMatrixClient.kt | 6 +- 2 files changed, 109 insertions(+), 3 deletions(-) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 9488e2f142..539600d9db 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -27,6 +27,8 @@ 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.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership +import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.test.AN_EXCEPTION import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.FakeMatrixClient @@ -240,6 +242,110 @@ class JoinRoomPresenterTest { } } + @Test + fun `present - when room is not known RoomPreview is loaded`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { + Result.success( + RoomPreview( + roomId = A_ROOM_ID, + canonicalAlias = RoomAlias("#alias:matrix.org"), + name = "Room name", + topic = "Room topic", + avatarUrl = "avatarUrl", + numberOfJoinedMembers = 2, + roomType = null, + isHistoryWorldReadable = false, + isJoined = false, + isInvited = false, + isPublic = true, + canKnock = false, + ) + ) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.Loaded( + roomId = A_ROOM_ID, + name = "Room name", + topic = "Room topic", + alias = RoomAlias("#alias:matrix.org"), + numberOfMembers = 2, + isDirect = false, + roomAvatarUrl = "avatarUrl", + joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin + ) + ) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded with error`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { + Result.failure(AN_EXCEPTION) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.Failure( + roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), + error = AN_EXCEPTION + ) + ) + state.eventSink(JoinRoomEvents.Retry) + } + skipItems(1) + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.Loading(A_ROOM_ID.toRoomIdOrAlias()) + ) + } + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.Failure( + roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), + error = AN_EXCEPTION + ) + ) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded with error 403`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { + Result.failure(Exception("403")) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.UnknownRoom( + roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), + ) + ) + } + } + } + private fun createJoinRoomPresenter( roomId: RoomId = A_ROOM_ID, roomDescription: Optional = Optional.empty(), diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 2e24139042..e43d7655f0 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -282,11 +282,11 @@ class FakeMatrixClient( } override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = simulateLongTask { - return resolveRoomAliasResult(roomAlias) + resolveRoomAliasResult(roomAlias) } - override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result { - return getRoomPreviewResult(roomIdOrAlias) + override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result = simulateLongTask { + getRoomPreviewResult(roomIdOrAlias) } override suspend fun getRecentlyVisitedRooms(): Result> { From 986f20b5263a8432f34233d3cc6b802c0ecb2061 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:01:37 +0200 Subject: [PATCH 048/289] Move RoomAliasResolver classes to their own module. --- .../android/appnav/room/RoomFlowNode.kt | 12 +++-- .../roomaliasresolver/api/build.gradle.kts | 28 ++++++++++ .../api/RoomAliasResolverEntryPoint.kt | 43 +++++++++++++++ .../roomaliasresolver/impl/build.gradle.kts | 53 +++++++++++++++++++ .../DefaultRoomAliasResolverEntryPoint.kt | 49 +++++++++++++++++ .../impl}/RoomAliasResolverEvents.kt | 2 +- .../impl}/RoomAliasResolverNode.kt | 17 ++---- .../impl}/RoomAliasResolverPresenter.kt | 2 +- .../impl}/RoomAliasResolverState.kt | 2 +- .../impl}/RoomAliasResolverStateProvider.kt | 2 +- .../impl}/RoomAliasResolverView.kt | 2 +- .../impl/di/RoomAliasResolverModule.kt | 5 +- .../impl}/RoomAliasResolverPresenterTest.kt | 2 +- 13 files changed, 194 insertions(+), 25 deletions(-) create mode 100644 features/roomaliasresolver/api/build.gradle.kts create mode 100644 features/roomaliasresolver/api/src/main/kotlin/io/element/android/features/roomaliasesolver/api/RoomAliasResolverEntryPoint.kt create mode 100644 features/roomaliasresolver/impl/build.gradle.kts create mode 100644 features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt rename {appnav/src/main/kotlin/io/element/android/appnav/room/resolver => features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl}/RoomAliasResolverEvents.kt (92%) rename {appnav/src/main/kotlin/io/element/android/appnav/room/resolver => features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl}/RoomAliasResolverNode.kt (80%) rename {appnav/src/main/kotlin/io/element/android/appnav/room/resolver => features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl}/RoomAliasResolverPresenter.kt (97%) rename {appnav/src/main/kotlin/io/element/android/appnav/room/resolver => features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl}/RoomAliasResolverState.kt (94%) rename {appnav/src/main/kotlin/io/element/android/appnav/room/resolver => features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl}/RoomAliasResolverStateProvider.kt (96%) rename {appnav/src/main/kotlin/io/element/android/appnav/room/resolver => features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl}/RoomAliasResolverView.kt (99%) rename appnav/src/main/kotlin/io/element/android/appnav/room/resolver/ResolveRoomModule.kt => features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverModule.kt (88%) rename {appnav/src/test/kotlin/io/element/android/appnav/room/resolver => features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl}/RoomAliasResolverPresenterTest.kt (98%) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index d0fc830892..932e36811b 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -36,8 +36,8 @@ import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.room.joined.JoinedRoomFlowNode import io.element.android.appnav.room.joined.JoinedRoomLoadedFlowNode -import io.element.android.appnav.room.resolver.RoomAliasResolverNode import io.element.android.features.joinroom.api.JoinRoomEntryPoint +import io.element.android.features.roomaliasesolver.api.RoomAliasResolverEntryPoint import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode @@ -68,6 +68,7 @@ class RoomFlowNode @AssistedInject constructor( private val client: MatrixClient, private val roomMembershipObserver: RoomMembershipObserver, private val joinRoomEntryPoint: JoinRoomEntryPoint, + private val roomAliasResolverEntryPoint: RoomAliasResolverEntryPoint, ) : BaseFlowNode( backstack = BackStack( initialElement = NavTarget.Loading, @@ -144,13 +145,16 @@ class RoomFlowNode @AssistedInject constructor( return when (navTarget) { is NavTarget.Loading -> loadingNode(buildContext) is NavTarget.Resolving -> { - val callback = object : RoomAliasResolverNode.Callback { + val callback = object : RoomAliasResolverEntryPoint.Callback { override fun onAliasResolved(roomId: RoomId) { backstack.newRoot(NavTarget.JoinRoom(roomId)) } } - val params = RoomAliasResolverNode.Inputs(navTarget.roomAlias) - createNode(buildContext, listOf(callback, params)) + val params = RoomAliasResolverEntryPoint.Params(navTarget.roomAlias) + roomAliasResolverEntryPoint.nodeBuilder(this, buildContext) + .callback(callback) + .params(params) + .build() } is NavTarget.JoinRoom -> { val inputs = JoinRoomEntryPoint.Inputs( diff --git a/features/roomaliasresolver/api/build.gradle.kts b/features/roomaliasresolver/api/build.gradle.kts new file mode 100644 index 0000000000..631c9e2dbf --- /dev/null +++ b/features/roomaliasresolver/api/build.gradle.kts @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + id("io.element.android-library") +} + +android { + namespace = "io.element.android.features.roomaliasresolver.api" +} + +dependencies { + implementation(projects.libraries.architecture) + implementation(projects.libraries.matrix.api) +} diff --git a/features/roomaliasresolver/api/src/main/kotlin/io/element/android/features/roomaliasesolver/api/RoomAliasResolverEntryPoint.kt b/features/roomaliasresolver/api/src/main/kotlin/io/element/android/features/roomaliasesolver/api/RoomAliasResolverEntryPoint.kt new file mode 100644 index 0000000000..8c0cc10f64 --- /dev/null +++ b/features/roomaliasresolver/api/src/main/kotlin/io/element/android/features/roomaliasesolver/api/RoomAliasResolverEntryPoint.kt @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomaliasesolver.api + +import com.bumble.appyx.core.modality.BuildContext +import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin +import io.element.android.libraries.architecture.FeatureEntryPoint +import io.element.android.libraries.architecture.NodeInputs +import io.element.android.libraries.matrix.api.core.RoomAlias +import io.element.android.libraries.matrix.api.core.RoomId + +interface RoomAliasResolverEntryPoint : FeatureEntryPoint { + fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder + + interface NodeBuilder { + fun callback(callback: Callback): NodeBuilder + fun params(params: Params): NodeBuilder + fun build(): Node + } + + interface Callback : Plugin { + fun onAliasResolved(roomId: RoomId) + } + + data class Params( + val roomAlias: RoomAlias + ) : NodeInputs +} diff --git a/features/roomaliasresolver/impl/build.gradle.kts b/features/roomaliasresolver/impl/build.gradle.kts new file mode 100644 index 0000000000..eaf2773231 --- /dev/null +++ b/features/roomaliasresolver/impl/build.gradle.kts @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + id("io.element.android-compose-library") + alias(libs.plugins.anvil) + alias(libs.plugins.ksp) + id("kotlin-parcelize") +} + +android { + namespace = "io.element.android.features.roomaliasresolver.impl" +} + +anvil { + generateDaggerFactories.set(true) +} + +dependencies { + implementation(projects.anvilannotations) + anvil(projects.anvilcodegen) + api(projects.features.roomaliasresolver.api) + implementation(projects.libraries.core) + implementation(projects.libraries.architecture) + implementation(projects.libraries.androidutils) + implementation(projects.libraries.matrix.api) + implementation(projects.libraries.matrixui) + implementation(projects.libraries.designsystem) + implementation(projects.libraries.uiStrings) + + testImplementation(libs.test.junit) + testImplementation(libs.coroutines.test) + testImplementation(libs.molecule.runtime) + testImplementation(libs.test.truth) + testImplementation(libs.test.turbine) + testImplementation(projects.libraries.matrix.test) + testImplementation(projects.tests.testutils) + + ksp(libs.showkase.processor) +} diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt new file mode 100644 index 0000000000..46bb6cf6c1 --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomaliasresolver.impl + +import com.bumble.appyx.core.modality.BuildContext +import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.features.roomaliasesolver.api.RoomAliasResolverEntryPoint +import io.element.android.libraries.architecture.createNode +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +@ContributesBinding(AppScope::class) +class DefaultRoomAliasResolverEntryPoint @Inject constructor() : RoomAliasResolverEntryPoint { + override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomAliasResolverEntryPoint.NodeBuilder { + val plugins = ArrayList() + + return object : RoomAliasResolverEntryPoint.NodeBuilder { + override fun callback(callback: RoomAliasResolverEntryPoint.Callback): RoomAliasResolverEntryPoint.NodeBuilder { + plugins += callback + return this + } + + override fun params(params: RoomAliasResolverEntryPoint.Params): RoomAliasResolverEntryPoint.NodeBuilder { + plugins += params + return this + } + + override fun build(): Node { + return parentNode.createNode(buildContext, plugins) + } + } + } +} diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverEvents.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverEvents.kt similarity index 92% rename from appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverEvents.kt rename to features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverEvents.kt index 1eb3c8ffe9..60ac90d762 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverEvents.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverEvents.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.appnav.room.resolver +package io.element.android.features.roomaliasresolver.impl sealed interface RoomAliasResolverEvents { data object Retry : RoomAliasResolverEvents diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverNode.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverNode.kt similarity index 80% rename from appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverNode.kt rename to features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverNode.kt index c429ec1a95..a4dbcc40b5 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverNode.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverNode.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.appnav.room.resolver +package io.element.android.features.roomaliasresolver.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -25,10 +25,9 @@ import com.bumble.appyx.core.plugin.plugins import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode -import io.element.android.libraries.architecture.NodeInputs +import io.element.android.features.roomaliasesolver.api.RoomAliasResolverEntryPoint import io.element.android.libraries.architecture.inputs import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId @ContributesNode(SessionScope::class) @@ -37,22 +36,14 @@ class RoomAliasResolverNode @AssistedInject constructor( @Assisted plugins: List, presenterFactory: RoomAliasResolverPresenter.Factory, ) : Node(buildContext, plugins = plugins) { - data class Inputs( - val roomAlias: RoomAlias - ) : NodeInputs - - private val inputs = inputs() + private val inputs = inputs() private val presenter = presenterFactory.create( inputs.roomAlias ) - interface Callback : Plugin { - fun onAliasResolved(roomId: RoomId) - } - private fun onAliasResolved(roomId: RoomId) { - plugins().forEach { it.onAliasResolved(roomId) } + plugins().forEach { it.onAliasResolved(roomId) } } @Composable diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenter.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt similarity index 97% rename from appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenter.kt rename to features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt index 5e9e3382d5..775be7d6ff 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenter.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.appnav.room.resolver +package io.element.android.features.roomaliasresolver.impl import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverState.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverState.kt similarity index 94% rename from appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverState.kt rename to features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverState.kt index 4f800a76cd..638214da3f 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverState.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverState.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.appnav.room.resolver +package io.element.android.features.roomaliasresolver.impl import androidx.compose.runtime.Immutable import io.element.android.libraries.architecture.AsyncData diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverStateProvider.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverStateProvider.kt similarity index 96% rename from appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverStateProvider.kt rename to features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverStateProvider.kt index 9584bb21b8..3c5599628c 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverStateProvider.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverStateProvider.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.appnav.room.resolver +package io.element.android.features.roomaliasresolver.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.architecture.AsyncData diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt similarity index 99% rename from appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverView.kt rename to features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index e208119a16..fa61012ec0 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.appnav.room.resolver +package io.element.android.features.roomaliasresolver.impl import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/ResolveRoomModule.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverModule.kt similarity index 88% rename from appnav/src/main/kotlin/io/element/android/appnav/room/resolver/ResolveRoomModule.kt rename to features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverModule.kt index 687fefc5c5..538cc57f32 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/resolver/ResolveRoomModule.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverModule.kt @@ -14,18 +14,19 @@ * limitations under the License. */ -package io.element.android.appnav.room.resolver +package io.element.android.features.roomaliasresolver.impl.di import com.squareup.anvil.annotations.ContributesTo import dagger.Module import dagger.Provides +import io.element.android.features.roomaliasresolver.impl.RoomAliasResolverPresenter import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomAlias @Module @ContributesTo(SessionScope::class) -object ResolveRoomModule { +object RoomAliasResolverModule { @Provides fun providesJoinRoomPresenterFactory( client: MatrixClient, diff --git a/appnav/src/test/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenterTest.kt b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenterTest.kt similarity index 98% rename from appnav/src/test/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenterTest.kt rename to features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenterTest.kt index 79e44cd627..2c64690600 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/room/resolver/RoomAliasResolverPresenterTest.kt +++ b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenterTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.appnav.room.resolver +package io.element.android.features.roomaliasresolver.impl import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow From 1fcaf902e0219389a84a3f2e3260004f332624df Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:06:54 +0200 Subject: [PATCH 049/289] Rename `eventId` to `focusedEventId` for clarity. --- .../element/android/appnav/room/RoomNavigationTarget.kt | 2 +- .../appnav/room/joined/JoinedRoomLoadedFlowNode.kt | 6 +++--- .../android/features/messages/api/MessagesEntryPoint.kt | 2 +- .../features/messages/impl/DefaultMessagesEntryPoint.kt | 2 +- .../android/features/messages/impl/MessagesFlowNode.kt | 8 ++++---- .../android/features/messages/impl/MessagesNode.kt | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomNavigationTarget.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomNavigationTarget.kt index 776171d141..c8d8cf9030 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomNavigationTarget.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomNavigationTarget.kt @@ -22,7 +22,7 @@ import kotlinx.parcelize.Parcelize sealed interface RoomNavigationTarget : Parcelable { @Parcelize - data class Messages(val eventId: EventId? = null) : RoomNavigationTarget + data class Messages(val focusedEventId: EventId? = null) : RoomNavigationTarget @Parcelize data object Details : RoomNavigationTarget diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt index 7a6c736385..5f9a6b6eb3 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt @@ -66,7 +66,7 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( ) : BaseFlowNode( backstack = BackStack( initialElement = when (val input = plugins.filterIsInstance(Inputs::class.java).first().initialElement) { - is RoomNavigationTarget.Messages -> NavTarget.Messages(input.eventId) + is RoomNavigationTarget.Messages -> NavTarget.Messages(input.focusedEventId) RoomNavigationTarget.Details -> NavTarget.RoomDetails RoomNavigationTarget.NotificationSettings -> NavTarget.RoomNotificationSettings }, @@ -161,7 +161,7 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( } } messagesEntryPoint.nodeBuilder(this, buildContext) - .params(MessagesEntryPoint.Params(navTarget.eventId)) + .params(MessagesEntryPoint.Params(navTarget.focusedEventId)) .callback(callback) .build() } @@ -179,7 +179,7 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( sealed interface NavTarget : Parcelable { @Parcelize - data class Messages(val eventId: EventId? = null) : NavTarget + data class Messages(val focusedEventId: EventId? = null) : NavTarget @Parcelize data object RoomDetails : NavTarget diff --git a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt index 9012d3a776..15d6e5fd95 100644 --- a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt +++ b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt @@ -35,7 +35,7 @@ interface MessagesEntryPoint : FeatureEntryPoint { } data class Params( - val eventId: EventId?, + val focusedEventId: EventId?, ) interface Callback : Plugin { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt index b45c7fc6b5..73ab29bfeb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt @@ -32,7 +32,7 @@ class DefaultMessagesEntryPoint @Inject constructor() : MessagesEntryPoint { return object : MessagesEntryPoint.NodeBuilder { override fun params(params: MessagesEntryPoint.Params): MessagesEntryPoint.NodeBuilder { - plugins += MessagesNode.Inputs(eventId = params.eventId) + plugins += MessagesNode.Inputs(focusedEventId = params.focusedEventId) return this } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt index c8a0a753c4..f92214b679 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt @@ -81,7 +81,7 @@ class MessagesFlowNode @AssistedInject constructor( private val createPollEntryPoint: CreatePollEntryPoint, ) : BaseFlowNode( backstack = BackStack( - initialElement = NavTarget.Messages(plugins.filterIsInstance().firstOrNull()?.eventId), + initialElement = NavTarget.Messages(plugins.filterIsInstance().firstOrNull()?.focusedEventId), savedStateMap = buildContext.savedStateMap, ), overlay = Overlay( @@ -90,7 +90,7 @@ class MessagesFlowNode @AssistedInject constructor( buildContext = buildContext, plugins = plugins ) { - data class Inputs(val eventId: EventId?) : NodeInputs + data class Inputs(val focusedEventId: EventId?) : NodeInputs sealed interface NavTarget : Parcelable { @Parcelize @@ -98,7 +98,7 @@ class MessagesFlowNode @AssistedInject constructor( @Parcelize data class Messages( - val eventId: EventId? = null, + val focusedEventId: EventId? = null, ) : NavTarget @Parcelize @@ -192,7 +192,7 @@ class MessagesFlowNode @AssistedInject constructor( } } val params = MessagesNode.Inputs( - eventId = navTarget.eventId, + focusedEventId = navTarget.focusedEventId, ) createNode(buildContext, listOf(callback, params)) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 37292f5e08..88472956c0 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -69,7 +69,7 @@ class MessagesNode @AssistedInject constructor( private val callback = plugins().firstOrNull() // TODO Handle navigation to the Event - data class Inputs(val eventId: EventId?) : NodeInputs + data class Inputs(val focusedEventId: EventId?) : NodeInputs interface Callback : Plugin { fun onRoomDetailsClicked() From 8e5ae8de2c1c9f0292b9a348ff11eada5ef2bc53 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:04:45 +0200 Subject: [PATCH 050/289] Avoid providing default value. --- .../main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 960b393266..b4326803ab 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -194,7 +194,7 @@ class LoggedInFlowNode @AssistedInject constructor( data class Room( val roomIdOrAlias: RoomIdOrAlias, val roomDescription: RoomDescription? = null, - val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(null) + val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages() ) : NavTarget @Parcelize From c9580ad1e536ab2348fb06ed54974a908978ba60 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:10:27 +0200 Subject: [PATCH 051/289] Remove extra space. --- .../android/libraries/matrix/api/room/preview/RoomPreview.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt index ad16561380..4dfec3add4 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt @@ -23,7 +23,7 @@ data class RoomPreview( /** The room id for this room. */ val roomId: RoomId, /** The canonical alias for the room. */ - val canonicalAlias : RoomAlias?, + val canonicalAlias: RoomAlias?, /** The room's name, if set. */ val name: String?, /** The room's topic, if set. */ From b8d87d4e75419e9e1073605e1a727e3be60c4a4e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:13:51 +0200 Subject: [PATCH 052/289] Ignore too generic exceptions (temporary code). --- .../element/android/libraries/matrix/impl/RustMatrixClient.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 82619352c0..d27daaafdd 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -464,6 +464,7 @@ class RustMatrixClient( } } + @Suppress("TooGenericExceptionThrown") override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = withContext(sessionDispatcher) { runCatching { // TODO Waiting for SDK to be released @@ -472,6 +473,7 @@ class RustMatrixClient( } } + @Suppress("TooGenericExceptionThrown") override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result = withContext(sessionDispatcher) { runCatching { // TODO Waiting for SDK to be released From 234696cb031ef33cc151ce32e52c4f672dfd1a1e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:15:00 +0200 Subject: [PATCH 053/289] Rename `JoinRoomEvents.Retry` to `JoinRoomEvents.RetryFetchingContent` --- .../io/element/android/features/joinroom/impl/JoinRoomEvents.kt | 2 +- .../element/android/features/joinroom/impl/JoinRoomPresenter.kt | 2 +- .../io/element/android/features/joinroom/impl/JoinRoomView.kt | 2 +- .../android/features/joinroom/impl/JoinRoomPresenterTest.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt index 2dddb22e13..7163fc2bad 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt @@ -17,7 +17,7 @@ package io.element.android.features.joinroom.impl sealed interface JoinRoomEvents { - data object Retry : JoinRoomEvents + data object RetryFetchingContent : JoinRoomEvents data object JoinRoom : JoinRoomEvents data object AcceptInvite : JoinRoomEvents data object DeclineInvite : JoinRoomEvents diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 504294037f..f7feb43926 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -109,7 +109,7 @@ class JoinRoomPresenter @AssistedInject constructor( AcceptDeclineInviteEvents.DeclineInvite(inviteData) ) } - JoinRoomEvents.Retry -> { + JoinRoomEvents.RetryFetchingContent -> { retryCount++ } } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index a22b114d08..e7b43af679 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -84,7 +84,7 @@ fun JoinRoomView( state.eventSink(JoinRoomEvents.JoinRoom) }, onRetry = { - state.eventSink(JoinRoomEvents.Retry) + state.eventSink(JoinRoomEvents.RetryFetchingContent) } ) } diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 539600d9db..ff5a1b10b2 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -305,7 +305,7 @@ class JoinRoomPresenterTest { error = AN_EXCEPTION ) ) - state.eventSink(JoinRoomEvents.Retry) + state.eventSink(JoinRoomEvents.RetryFetchingContent) } skipItems(1) awaitItem().also { state -> From b9b2072b28e198e30d76aa5b7a269d3bc4a43ad7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:19:38 +0200 Subject: [PATCH 054/289] Remove useless usage of coroutine scope. --- .../joinroom/impl/JoinRoomPresenter.kt | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index f7feb43926..93399b0446 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import dagger.assisted.Assisted import dagger.assisted.AssistedInject @@ -39,7 +38,6 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview -import kotlinx.coroutines.launch import java.util.Optional class JoinRoomPresenter @AssistedInject constructor( @@ -59,7 +57,6 @@ class JoinRoomPresenter @AssistedInject constructor( @Composable override fun present(): JoinRoomState { - val coroutineScope = rememberCoroutineScope() var retryCount by remember { mutableIntStateOf(0) } val roomInfo by matrixClient.getRoomInfoFlow(roomId).collectAsState(initial = Optional.empty()) val contentState by produceState( @@ -67,28 +64,26 @@ class JoinRoomPresenter @AssistedInject constructor( key1 = roomInfo, key2 = retryCount, ) { - value = when { + when { roomInfo.isPresent -> { - roomInfo.get().toContentState() + value = roomInfo.get().toContentState() } roomDescription.isPresent -> { - roomDescription.get().toContentState() + value = roomDescription.get().toContentState() } else -> { - coroutineScope.launch { - val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) - value = result.fold( - onSuccess = { it.toContentState() }, - onFailure = { throwable -> - if (throwable.message?.contains("403") == true) { - ContentState.UnknownRoom(roomIdOrAlias) - } else { - ContentState.Failure(roomIdOrAlias, throwable) - } + value = ContentState.Loading(roomIdOrAlias) + val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) + value = result.fold( + onSuccess = { it.toContentState() }, + onFailure = { throwable -> + if (throwable.message?.contains("403") == true) { + ContentState.UnknownRoom(roomIdOrAlias) + } else { + ContentState.Failure(roomIdOrAlias, throwable) } - ) - } - ContentState.Loading(roomIdOrAlias) + } + ) } } } From 3bd65be894ecf5e3c4af2651856205883088632d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:21:02 +0200 Subject: [PATCH 055/289] Remove useless launch. --- .../android/appnav/LoggedInFlowNode.kt | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index b4326803ab..83cfd5f1f3 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -274,25 +274,23 @@ class LoggedInFlowNode @AssistedInject constructor( } override fun onPermalinkClicked(data: PermalinkData) { - coroutineScope.launch { - when (data) { - is PermalinkData.UserLink -> { - // FIXME Add a user profile screen. - Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") - } - is PermalinkData.RoomLink -> { - backstack.push( - NavTarget.Room( - data.roomIdOrAlias, - initialElement = RoomNavigationTarget.Messages(data.eventId), - // TODO Use the viaParameters - ) + when (data) { + is PermalinkData.UserLink -> { + // FIXME Add a user profile screen. + Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") + } + is PermalinkData.RoomLink -> { + backstack.push( + NavTarget.Room( + data.roomIdOrAlias, + initialElement = RoomNavigationTarget.Messages(data.eventId), + // TODO Use the viaParameters ) - } - is PermalinkData.FallbackLink, - is PermalinkData.RoomEmailInviteLink -> { - // Should not happen (handled by MessagesNode) - } + ) + } + is PermalinkData.FallbackLink, + is PermalinkData.RoomEmailInviteLink -> { + // Should not happen (handled by MessagesNode) } } } From d0fdaaeb86d0a7746017d78280bb6454a8b2c503 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:25:45 +0200 Subject: [PATCH 056/289] Move ContentScaffold to design system and rename to RoomPreviewOrganism --- .../features/joinroom/impl/JoinRoomView.kt | 48 +++------------- .../impl/RoomAliasResolverView.kt | 37 +----------- .../atomic/organisms/RoomPreviewOrganism.kt | 56 +++++++++++++++++++ 3 files changed, 66 insertions(+), 75 deletions(-) create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/organisms/RoomPreviewOrganism.kt diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index e7b43af679..fe022f0a34 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -18,12 +18,9 @@ package io.element.android.features.joinroom.impl import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.shape.CircleShape @@ -42,6 +39,7 @@ import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.atomic.molecules.ButtonRowMolecule +import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize @@ -154,7 +152,7 @@ private fun JoinRoomContent( ) { when (contentState) { is ContentState.Loaded -> { - ContentScaffold( + RoomPreviewOrganism( modifier = modifier, avatar = { Avatar(contentState.avatarData(AvatarSize.RoomHeader)) @@ -176,7 +174,7 @@ private fun JoinRoomContent( ) } is ContentState.UnknownRoom -> { - ContentScaffold( + RoomPreviewOrganism( modifier = modifier, avatar = { PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) @@ -190,7 +188,7 @@ private fun JoinRoomContent( ) } is ContentState.Loading -> { - ContentScaffold( + RoomPreviewOrganism( modifier = modifier, avatar = { PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) @@ -204,7 +202,7 @@ private fun JoinRoomContent( ) } is ContentState.Failure -> { - ContentScaffold( + RoomPreviewOrganism( modifier = modifier, avatar = { PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) @@ -231,36 +229,6 @@ private fun JoinRoomContent( } } -@Composable -private fun ContentScaffold( - avatar: @Composable () -> Unit, - title: @Composable () -> Unit, - subtitle: @Composable () -> Unit, - modifier: Modifier = Modifier, - description: @Composable (() -> Unit)? = null, - memberCount: @Composable (() -> Unit)? = null, -) { - Column( - modifier = modifier.fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - avatar() - Spacer(modifier = Modifier.height(16.dp)) - title() - Spacer(modifier = Modifier.height(8.dp)) - subtitle() - Spacer(modifier = Modifier.height(8.dp)) - if (memberCount != null) { - memberCount() - } - Spacer(modifier = Modifier.height(8.dp)) - if (description != null) { - description() - } - Spacer(modifier = Modifier.height(24.dp)) - } -} - @Composable private fun Title(title: String, modifier: Modifier = Modifier) { Text( @@ -300,9 +268,9 @@ private fun Description(description: String, modifier: Modifier = Modifier) { private fun MembersCount(memberCount: Long) { Row( modifier = Modifier - .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) - .widthIn(min = 48.dp) - .padding(all = 2.dp), + .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) + .widthIn(min = 48.dp) + .padding(all = 2.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(4.dp) ) { diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index fa61012ec0..37ccffde12 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -17,19 +17,15 @@ package io.element.android.features.roomaliasresolver.impl import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberUpdatedState -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -39,6 +35,7 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom +import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton @@ -116,7 +113,7 @@ private fun RoomAliasResolverContent( state: RoomAliasResolverState, modifier: Modifier = Modifier, ) { - ContentScaffold( + RoomPreviewOrganism( modifier = modifier, avatar = { PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) @@ -140,36 +137,6 @@ private fun RoomAliasResolverContent( ) } -@Composable -private fun ContentScaffold( - avatar: @Composable () -> Unit, - title: @Composable () -> Unit, - subtitle: @Composable () -> Unit, - modifier: Modifier = Modifier, - description: @Composable (() -> Unit)? = null, - memberCount: @Composable (() -> Unit)? = null, -) { - Column( - modifier = modifier.fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - avatar() - Spacer(modifier = Modifier.height(16.dp)) - title() - Spacer(modifier = Modifier.height(8.dp)) - subtitle() - Spacer(modifier = Modifier.height(8.dp)) - if (memberCount != null) { - memberCount() - } - Spacer(modifier = Modifier.height(8.dp)) - if (description != null) { - description() - } - Spacer(modifier = Modifier.height(24.dp)) - } -} - @Composable private fun Title(title: String, modifier: Modifier = Modifier) { Text( diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/organisms/RoomPreviewOrganism.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/organisms/RoomPreviewOrganism.kt new file mode 100644 index 0000000000..ede1cff787 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/organisms/RoomPreviewOrganism.kt @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.atomic.organisms + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun RoomPreviewOrganism( + avatar: @Composable () -> Unit, + title: @Composable () -> Unit, + subtitle: @Composable () -> Unit, + modifier: Modifier = Modifier, + description: @Composable (() -> Unit)? = null, + memberCount: @Composable (() -> Unit)? = null, +) { + Column( + modifier = modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + avatar() + Spacer(modifier = Modifier.height(16.dp)) + title() + Spacer(modifier = Modifier.height(8.dp)) + subtitle() + Spacer(modifier = Modifier.height(8.dp)) + if (memberCount != null) { + memberCount() + } + Spacer(modifier = Modifier.height(8.dp)) + if (description != null) { + description() + } + Spacer(modifier = Modifier.height(24.dp)) + } +} From 1b8dd2cdede7e51284aeae35570af86d4ea4f3ab Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:32:59 +0200 Subject: [PATCH 057/289] Create Atom and Molecule for RoomPreview screens --- .../features/joinroom/impl/JoinRoomView.kt | 86 +++---------------- .../impl/RoomAliasResolverView.kt | 15 +--- .../atoms/RoomPreviewDescriptionAtom.kt | 37 ++++++++ .../atomic/atoms/RoomPreviewSubtitleAtom.kt | 34 ++++++++ .../atomic/atoms/RoomPreviewTitleAtom.kt | 34 ++++++++ .../RoomPreviewMembersCountMolecule.kt | 55 ++++++++++++ 6 files changed, 173 insertions(+), 88 deletions(-) create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewDescriptionAtom.kt create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewSubtitleAtom.kt create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewTitleAtom.kt create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index fe022f0a34..e944dc281f 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -16,30 +16,25 @@ package io.element.android.features.joinroom.impl -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.widthIn -import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier 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.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme -import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.atomic.molecules.ButtonRowMolecule +import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewDescriptionAtom +import io.element.android.libraries.designsystem.atomic.molecules.RoomPreviewMembersCountMolecule import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism +import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewSubtitleAtom +import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewTitleAtom import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize @@ -47,7 +42,6 @@ import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.ButtonSize -import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.OutlinedButton import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar @@ -158,17 +152,17 @@ private fun JoinRoomContent( Avatar(contentState.avatarData(AvatarSize.RoomHeader)) }, title = { - Title(contentState.computedTitle) + RoomPreviewTitleAtom(contentState.computedTitle) }, subtitle = { - Subtitle(contentState.computedSubtitle) + RoomPreviewSubtitleAtom(contentState.computedSubtitle) }, description = { - Description(contentState.topic ?: "") + RoomPreviewDescriptionAtom(contentState.topic ?: "") }, memberCount = { if (contentState.showMemberCount) { - MembersCount(memberCount = contentState.numberOfMembers ?: 0) + RoomPreviewMembersCountMolecule(memberCount = contentState.numberOfMembers ?: 0) } } ) @@ -180,10 +174,10 @@ private fun JoinRoomContent( PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) }, title = { - Title(stringResource(R.string.screen_join_room_title_no_preview)) + RoomPreviewTitleAtom(stringResource(R.string.screen_join_room_title_no_preview)) }, subtitle = { - Subtitle(stringResource(R.string.screen_join_room_subtitle_no_preview)) + RoomPreviewSubtitleAtom(stringResource(R.string.screen_join_room_subtitle_no_preview)) }, ) } @@ -210,7 +204,7 @@ private fun JoinRoomContent( title = { when (contentState.roomIdOrAlias) { is RoomIdOrAlias.Alias -> { - Title(contentState.roomIdOrAlias.identifier) + RoomPreviewTitleAtom(contentState.roomIdOrAlias.identifier) } is RoomIdOrAlias.Id -> { PlaceholderAtom(width = 200.dp, height = 22.dp) @@ -229,64 +223,6 @@ private fun JoinRoomContent( } } -@Composable -private fun Title(title: String, modifier: Modifier = Modifier) { - Text( - modifier = modifier, - text = title, - style = ElementTheme.typography.fontHeadingMdBold, - textAlign = TextAlign.Center, - color = ElementTheme.colors.textPrimary, - ) -} - -@Composable -private fun Subtitle(subtitle: String, modifier: Modifier = Modifier) { - Text( - modifier = modifier, - text = subtitle, - style = ElementTheme.typography.fontBodyLgRegular, - textAlign = TextAlign.Center, - color = ElementTheme.colors.textSecondary, - ) -} - -@Composable -private fun Description(description: String, modifier: Modifier = Modifier) { - Text( - modifier = modifier, - text = description, - style = ElementTheme.typography.fontBodySmRegular, - textAlign = TextAlign.Center, - color = ElementTheme.colors.textSecondary, - maxLines = 3, - overflow = TextOverflow.Ellipsis, - ) -} - -@Composable -private fun MembersCount(memberCount: Long) { - Row( - modifier = Modifier - .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) - .widthIn(min = 48.dp) - .padding(all = 2.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(4.dp) - ) { - Icon( - imageVector = CompoundIcons.UserProfile(), - contentDescription = null, - tint = ElementTheme.colors.iconSecondary, - ) - Text( - text = "$memberCount", - style = ElementTheme.typography.fontBodySmMedium, - color = ElementTheme.colors.textSecondary, - ) - } -} - @OptIn(ExperimentalMaterial3Api::class) @Composable private fun JoinRoomTopBar( diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index 37ccffde12..e032af66cb 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -32,9 +32,9 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom +import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewTitleAtom import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.components.avatar.AvatarSize @@ -119,9 +119,9 @@ private fun RoomAliasResolverContent( PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) }, title = { + RoomPreviewTitleAtom(state.roomAlias.value) }, subtitle = { - Title(state.roomAlias.value) }, description = { if (state.resolveState.isFailure()) { @@ -137,17 +137,6 @@ private fun RoomAliasResolverContent( ) } -@Composable -private fun Title(title: String, modifier: Modifier = Modifier) { - Text( - modifier = modifier, - text = title, - style = ElementTheme.typography.fontHeadingMdBold, - textAlign = TextAlign.Center, - color = ElementTheme.colors.textPrimary, - ) -} - @OptIn(ExperimentalMaterial3Api::class) @Composable private fun RoomAliasResolverTopBar( diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewDescriptionAtom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewDescriptionAtom.kt new file mode 100644 index 0000000000..13bc48ea3a --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewDescriptionAtom.kt @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.atomic.atoms + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.theme.components.Text + +@Composable +fun RoomPreviewDescriptionAtom(description: String, modifier: Modifier = Modifier) { + Text( + modifier = modifier, + text = description, + style = ElementTheme.typography.fontBodySmRegular, + textAlign = TextAlign.Center, + color = ElementTheme.colors.textSecondary, + maxLines = 3, + overflow = TextOverflow.Ellipsis, + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewSubtitleAtom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewSubtitleAtom.kt new file mode 100644 index 0000000000..0548eadd17 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewSubtitleAtom.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.atomic.atoms + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.theme.components.Text + +@Composable +fun RoomPreviewSubtitleAtom(subtitle: String, modifier: Modifier = Modifier) { + Text( + modifier = modifier, + text = subtitle, + style = ElementTheme.typography.fontBodyLgRegular, + textAlign = TextAlign.Center, + color = ElementTheme.colors.textSecondary, + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewTitleAtom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewTitleAtom.kt new file mode 100644 index 0000000000..81edd42db5 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewTitleAtom.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.atomic.atoms + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.theme.components.Text + +@Composable +fun RoomPreviewTitleAtom(title: String, modifier: Modifier = Modifier) { + Text( + modifier = modifier, + text = title, + style = ElementTheme.typography.fontHeadingMdBold, + textAlign = TextAlign.Center, + color = ElementTheme.colors.textPrimary, + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt new file mode 100644 index 0000000000..508d637174 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.atomic.molecules + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme +import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.libraries.designsystem.theme.components.Icon +import io.element.android.libraries.designsystem.theme.components.Text + +@Composable +fun RoomPreviewMembersCountMolecule(memberCount: Long) { + Row( + modifier = Modifier + .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) + .widthIn(min = 48.dp) + .padding(all = 2.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp) + ) { + Icon( + imageVector = CompoundIcons.UserProfile(), + contentDescription = null, + tint = ElementTheme.colors.iconSecondary, + ) + Text( + text = "$memberCount", + style = ElementTheme.typography.fontBodySmMedium, + color = ElementTheme.colors.textSecondary, + ) + } +} From 378d2c0a051a8079bc8222e3b332759c140200af Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:53:00 +0200 Subject: [PATCH 058/289] Subscrie to RoomInfoFlow instead of pushing the JoinRoom. The user may be a member of the room, and in this case, it will be more direct. --- .../main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index 932e36811b..6d6405c0e8 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -147,7 +147,7 @@ class RoomFlowNode @AssistedInject constructor( is NavTarget.Resolving -> { val callback = object : RoomAliasResolverEntryPoint.Callback { override fun onAliasResolved(roomId: RoomId) { - backstack.newRoot(NavTarget.JoinRoom(roomId)) + subscribeToRoomInfoFlow(roomId) } } val params = RoomAliasResolverEntryPoint.Params(navTarget.roomAlias) From 275733757dce9eb32ae3ee8fb401c96c94fceaa2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Apr 2024 23:59:44 +0200 Subject: [PATCH 059/289] Use string from Localazy. --- .../roomaliasresolver/impl/RoomAliasResolverView.kt | 2 +- .../roomaliasresolver/impl/src/main/res/values/localazy.xml | 4 ++++ tools/localazy/config.json | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 features/roomaliasresolver/impl/src/main/res/values/localazy.xml diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index e032af66cb..03c47602e4 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -126,7 +126,7 @@ private fun RoomAliasResolverContent( description = { if (state.resolveState.isFailure()) { Text( - text = "Failed to resolve room alias", + text = stringResource(id = R.string.screen_room_alias_resolver_resolve_alias_failure), textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.error, ) diff --git a/features/roomaliasresolver/impl/src/main/res/values/localazy.xml b/features/roomaliasresolver/impl/src/main/res/values/localazy.xml new file mode 100644 index 0000000000..21d5c17135 --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values/localazy.xml @@ -0,0 +1,4 @@ + + + "Failed to resolve room alias." + diff --git a/tools/localazy/config.json b/tools/localazy/config.json index 15d2f67949..7d546df8ae 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -20,6 +20,12 @@ "screen_signout_.*" ] }, + { + "name" : ":features:roomaliasresolver:impl", + "includeRegex" : [ + "screen_room_alias_resolver_.*" + ] + }, { "name" : ":features:onboarding:impl", "includeRegex" : [ From cecc6f2085a710ba4f45ce179d6405ce18a29fa3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 00:29:59 +0200 Subject: [PATCH 060/289] Fix compilation issue after rebase: String -> RoomAlias --- .../features/roomlist/impl/components/RoomSummaryRow.kt | 5 +++-- .../features/roomlist/impl/model/RoomListRoomSummary.kt | 3 ++- .../roomlist/impl/model/RoomListRoomSummaryProvider.kt | 5 +++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index ce27d3b916..92616f460e 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -65,6 +65,7 @@ import io.element.android.libraries.designsystem.theme.roomListRoomMessage import io.element.android.libraries.designsystem.theme.roomListRoomMessageDate import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.unreadIndicator +import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.ui.strings.CommonStrings import timber.log.Timber @@ -198,13 +199,13 @@ private fun NameAndTimestampRow( private fun InviteSubtitle( isDirect: Boolean, inviteSender: InviteSender?, - canonicalAlias: String?, + canonicalAlias: RoomAlias?, modifier: Modifier = Modifier ) { val subtitle = if (isDirect) { inviteSender?.userId?.value } else { - canonicalAlias + canonicalAlias?.value } if (subtitle != null) { Text( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index 4f37cd0ae6..741da3adcc 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -18,6 +18,7 @@ package io.element.android.features.roomlist.impl.model import androidx.compose.runtime.Immutable import io.element.android.libraries.designsystem.components.avatar.AvatarData +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.room.RoomNotificationMode @@ -27,7 +28,7 @@ data class RoomListRoomSummary( val displayType: RoomSummaryDisplayType, val roomId: RoomId, val name: String, - val canonicalAlias: String?, + val canonicalAlias: RoomAlias?, val numberOfUnreadMessages: Int, val numberOfUnreadMentions: Int, val numberOfUnreadNotifications: Int, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index f44a857042..7691fab188 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -19,6 +19,7 @@ package io.element.android.features.roomlist.impl.model import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.core.RoomAlias 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.RoomNotificationMode @@ -88,7 +89,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider Date: Thu, 18 Apr 2024 00:43:34 +0200 Subject: [PATCH 061/289] String -> RoomAlias --- .../io/element/android/libraries/matrix/api/room/Mention.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/Mention.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/Mention.kt index 5285638713..a02fedde4b 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/Mention.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/Mention.kt @@ -23,5 +23,5 @@ sealed interface Mention { data class User(val userId: UserId) : Mention data object AtRoom : Mention data class Room(val roomId: RoomId) : Mention - data class RoomAlias(val roomAlias: String?) : Mention + data class RoomAlias(val roomAlias: RoomAlias?) : Mention } From 290a05439e4417af9940bc72ddcee09dc8b00f17 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 00:44:34 +0200 Subject: [PATCH 062/289] Fix test. --- .../android/features/roomdetails/RoomDetailsPresenterTests.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTests.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTests.kt index 895ce759f4..8ce06e3835 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTests.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTests.kt @@ -117,7 +117,7 @@ class RoomDetailsPresenterTests { val presenter = createRoomDetailsPresenter(room) presenter.test { val initialState = awaitItem() - assertThat(initialState.roomId).isEqualTo(room.roomId.value) + assertThat(initialState.roomId).isEqualTo(room.roomId) assertThat(initialState.roomName).isEqualTo(room.name) assertThat(initialState.roomAvatarUrl).isEqualTo(room.avatarUrl) assertThat(initialState.roomTopic).isEqualTo(RoomTopicState.ExistingTopic(room.topic!!)) From 35de78732629eb0021fdc5eb3fae3c9e106569a6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 00:56:46 +0200 Subject: [PATCH 063/289] Fix test. --- .../textcomposer/impl/mentions/MentionSpanProviderTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt index a3a4ee7884..2b346ceeab 100644 --- a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt +++ b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt @@ -82,10 +82,10 @@ class MentionSpanProviderTest { fun `getting mention span for @room should return a MentionSpan with normal colors`() { permalinkParser.givenResult( PermalinkData.RoomLink( - roomIdOrAlias = RoomAlias("#").toRoomIdOrAlias(), + roomIdOrAlias = RoomAlias("#room:matrix.org").toRoomIdOrAlias(), ) ) - val mentionSpan = mentionSpanProvider.getMentionSpanFor("@room", "#") + val mentionSpan = mentionSpanProvider.getMentionSpanFor("@room", "#room:matrix.org") assertThat(mentionSpan.backgroundColor).isEqualTo(otherColor) assertThat(mentionSpan.textColor).isEqualTo(otherColor) } From c6109dc2c8f5c9ec5e35900328c124f47981e152 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 23:01:21 +0000 Subject: [PATCH 064/289] Update datastore to v1.1.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6ab79bb7aa..30d4e406f7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ firebaseAppDistribution = "4.2.0" # AndroidX core = "1.12.0" -datastore = "1.0.0" +datastore = "1.1.0" constraintlayout = "2.1.4" constraintlayout_compose = "1.0.1" lifecycle = "2.7.0" From 4abe277bf8e8af8a3c1d91289f41bdd72c70823b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 23:19:29 +0000 Subject: [PATCH 065/289] Update dependency androidx.compose:compose-bom to v2024.04.01 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 97f8f51a06..cc419a9194 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ activity = "1.8.2" media3 = "1.3.1" # Compose -compose_bom = "2024.04.00" +compose_bom = "2024.04.01" composecompiler = "1.5.12" # Coroutines From 7528bb7ffae82ee36db57cf25c0e824a159fde98 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 01:27:33 +0200 Subject: [PATCH 066/289] Add Modifier and preview for RoomPreviewMembersCountMolecule. Also increase end padding to ensure that rendering is correct for big numbers. --- .../RoomPreviewMembersCountMolecule.kt | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt index 508d637174..c9f5bdf204 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.designsystem.atomic.molecules import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.widthIn @@ -28,16 +29,21 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text @Composable -fun RoomPreviewMembersCountMolecule(memberCount: Long) { +fun RoomPreviewMembersCountMolecule( + memberCount: Long, + modifier: Modifier = Modifier, +) { Row( - modifier = Modifier + modifier = modifier .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) .widthIn(min = 48.dp) - .padding(all = 2.dp), + .padding(start = 2.dp, end = 6.dp, top = 2.dp, bottom = 2.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(4.dp) ) { @@ -53,3 +59,16 @@ fun RoomPreviewMembersCountMolecule(memberCount: Long) { ) } } + +@PreviewsDayNight +@Composable +internal fun RoomPreviewMembersCountMoleculePreview() = ElementPreview { + Column( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + RoomPreviewMembersCountMolecule(memberCount = 1) + RoomPreviewMembersCountMolecule(memberCount = 888) + RoomPreviewMembersCountMolecule(memberCount = 123456) + } +} From bc1c93c663072e7178fd65ef19f7ff16ef9c276c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 01:35:21 +0200 Subject: [PATCH 067/289] Use `PreviewsDayNight` instead of `PreviewLightDark` in order to generate screenshots. --- .../features/invite/impl/response/AcceptDeclineInviteView.kt | 4 ++-- .../io/element/android/features/joinroom/impl/JoinRoomView.kt | 4 ++-- .../features/roomaliasresolver/impl/RoomAliasResolverView.kt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInviteView.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInviteView.kt index e0ad70ddc5..53919dbac8 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInviteView.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInviteView.kt @@ -20,7 +20,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.AcceptDeclineInviteStateProvider @@ -29,6 +28,7 @@ import io.element.android.features.invite.impl.R import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.ui.strings.CommonStrings import kotlin.jvm.optionals.getOrNull @@ -102,7 +102,7 @@ private fun DeclineConfirmationDialog( ) } -@PreviewLightDark +@PreviewsDayNight @Composable internal fun AcceptDeclineInviteViewLightPreview(@PreviewParameter(AcceptDeclineInviteStateProvider::class) state: AcceptDeclineInviteState) = ElementPreview { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index e944dc281f..9c93105f9a 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom @@ -40,6 +39,7 @@ import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.OutlinedButton @@ -236,7 +236,7 @@ private fun JoinRoomTopBar( ) } -@PreviewLightDark +@PreviewsDayNight @Composable internal fun JoinRoomViewPreview(@PreviewParameter(JoinRoomStateProvider::class) state: JoinRoomState) = ElementPreview { JoinRoomView( diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index 03c47602e4..271baad845 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -29,7 +29,6 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.libraries.architecture.AsyncData @@ -40,6 +39,7 @@ import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator @@ -150,7 +150,7 @@ private fun RoomAliasResolverTopBar( ) } -@PreviewLightDark +@PreviewsDayNight @Composable internal fun RoomAliasResolverViewPreview(@PreviewParameter(RoomAliasResolverStateProvider::class) state: RoomAliasResolverState) = ElementPreview { RoomAliasResolverView( From 29fccd3d9ec57ff87c57fe16bf600babbb6f3fca Mon Sep 17 00:00:00 2001 From: ElementBot Date: Wed, 17 Apr 2024 23:47:04 +0000 Subject: [PATCH 068/289] Update screenshots --- ...ptDeclineInviteViewLight-Day-0_1_null_0,NEXUS_5,1.0,en].png | 3 +++ ...ptDeclineInviteViewLight-Day-0_1_null_1,NEXUS_5,1.0,en].png | 3 +++ ...ptDeclineInviteViewLight-Day-0_1_null_2,NEXUS_5,1.0,en].png | 3 +++ ...ptDeclineInviteViewLight-Day-0_1_null_3,NEXUS_5,1.0,en].png | 3 +++ ...ptDeclineInviteViewLight-Day-0_1_null_4,NEXUS_5,1.0,en].png | 3 +++ ...DeclineInviteViewLight-Night-0_2_null_0,NEXUS_5,1.0,en].png | 3 +++ ...DeclineInviteViewLight-Night-0_2_null_1,NEXUS_5,1.0,en].png | 3 +++ ...DeclineInviteViewLight-Night-0_2_null_2,NEXUS_5,1.0,en].png | 3 +++ ...DeclineInviteViewLight-Night-0_2_null_3,NEXUS_5,1.0,en].png | 3 +++ ...DeclineInviteViewLight-Night-0_2_null_4,NEXUS_5,1.0,en].png | 3 +++ ...omView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 3 +++ ...omView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 3 +++ ...omView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 3 +++ ...omView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 3 +++ ...omView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png | 3 +++ ...omView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png | 3 +++ ...omView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png | 3 +++ ...View_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 3 +++ ...View_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 3 +++ ...View_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 3 +++ ...View_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 3 +++ ...View_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png | 3 +++ ...View_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png | 3 +++ ...View_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png | 3 +++ ...ll_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 3 +++ ...ll_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 3 +++ ...ll_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 3 +++ ..._RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 3 +++ ..._RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 3 +++ ..._RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 3 +++ ...mPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...reviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ 32 files changed, 96 insertions(+) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..665c8811ac --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb0d3bfcfd75cbd75fd9270ff1dc27090e5dbac79ca8db8a46d91a4c12bc966b +size 4457 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..707fdfc344 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a32da6aa9e7137262ea70c3901fb058c97daf24ff445eda23dac8640d188f124 +size 25585 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f18ab57edc --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c734484b6ac89c5540db52a62eb5ca17d5013c5901aea10876d769c6abb019dd +size 26263 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5c0332b884 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b2474c3058ae955f81985c02b9491cc79cd7d87001900dc449a1fb42684114f +size 11970 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5c0332b884 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b2474c3058ae955f81985c02b9491cc79cd7d87001900dc449a1fb42684114f +size 11970 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..fae8a6fca3 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c89ac73df77c2bccb0c2aa80cee1420f78e7d07f0eda89a90bffef55e8cf753 +size 4464 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..340042ca14 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f31dc397d61b8b088ece9680dd8c700a9a0d7bb6310859e82adba8c942effaf +size 21861 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4c38bc63ca --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6083235628afa1c7aee7dd584d14b4b3ac7cd76b077b040675b2de42adbb36b7 +size 22413 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..7ef2eda524 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:812e571d895c87f6b8ab77638a716a28c125dc6e41310f4f5d376035d96b5dae +size 9323 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..7ef2eda524 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:812e571d895c87f6b8ab77638a716a28c125dc6e41310f4f5d376035d96b5dae +size 9323 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..dc80770d93 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7406a2a6fa8e4dd4423a5141147ecc1aa235d4dbff980b7ef72fa2e59f502fc +size 7686 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e3c12ee174 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:329ade4a3d0e1b013f03bf5d2d107ce2dacc235f7e2defc24c5cd1623330b107 +size 23944 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4ce8f03332 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ed85e4bb1351a1af82b64628c35aff7ef165c9df9b1ac0e1bba737a9d1e15a8 +size 25797 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..9206b1001e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0ef19d140f808746f44b1801cc618048b9216a0e8413bb4ee5535a0cb8e9d80 +size 26590 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d681433b5c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ba446e166858f6da8d79ae4af997ff142d73edebf178aadf75579b041a3d267 +size 28605 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f30069d89c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c34154223d9eef3a66fbc9c266010e3e51b293db7f4698d550638fa8912a231 +size 16864 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..45d13a7673 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e70d55552b46b1a34848651bf8bcf8048ba2d28c7d2d356f8c1a0f71bb6e049 +size 21104 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..2cec18ce5d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa320f4667087c59776d08dfb9108a577e42eb51ba1e6b3d3ea6da3d55605495 +size 7523 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..cfafbbd9c2 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4244c5d24935e2cf6df3cff5d31eb7980757a1e555aedbb97561c1827778e2b +size 22816 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..219b7b1ebe --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3725b3e21eb939bebcc44b9c62f21817f1ab227dc7a9f2367b721cdb0e750720 +size 25127 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ef833bb514 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9d39f1a58193367bc780fe9f266ca3b0f3f6ffbcf37c14441537aa7ee5f473c +size 25839 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..77af4a413d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89c6f6644f84fc98ee0a0ced85f141cc862b1c114b2ca29874696f655926b4f2 +size 27539 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..09bf86e31a --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49c58bd2bbc86105e547bddf47c69df0017d6a4a66be0dc3f80e8cecfacf7a86 +size 15837 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4a2e191087 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:740d856d28b44200e7148d297103f8c38e2159c75e182c84f1d3d0d32cfff1bf +size 19529 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..fc7d210706 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9651397f53e398e05c27f41f341d1ae949fbdbce05e97083bb9aef909f67fbaf +size 11783 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..774701a753 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63c9d5c445abb20a80b45100afc59b6803f5744a9a6f83ce3d91653801fdd3eb +size 13455 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c060f1dbcf --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfc692c20e4b8998a675b72cac9b324da4ec636df68a5611ceaa368217e50243 +size 19618 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..0dcdf1c87d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15efd8dc8b74d3e5364b3f9204a5e85e0cff8689d3b632a61368e101b2e833ae +size 11099 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..08924db96b --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18cc9896eadf78db99e6f8a96ab67a2af22ce1f7072f84cd97dee6e50fd474b2 +size 12736 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d0608de0b7 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7db045b1e7877a6ee7b51e3996d43bcaee22ae930ade59701fd07f7a6b0eabf +size 18250 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d9166cd47d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:754e5614822424e86e73a631f5303074e85dfb6bf4e6abc7f7e698e2cbc8d6ba +size 12850 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..36604c6005 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d06d65a5768007020eab6b48844ea1216fcdb9b19f17f15171234f8a5dd9c517 +size 12394 From b7d4fa655e096284b8fd76e0fb64e8f8ec6920fa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 08:58:18 +0200 Subject: [PATCH 069/289] Readability --- .../atomic/molecules/RoomPreviewMembersCountMolecule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt index c9f5bdf204..a781c429b0 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt @@ -69,6 +69,6 @@ internal fun RoomPreviewMembersCountMoleculePreview() = ElementPreview { ) { RoomPreviewMembersCountMolecule(memberCount = 1) RoomPreviewMembersCountMolecule(memberCount = 888) - RoomPreviewMembersCountMolecule(memberCount = 123456) + RoomPreviewMembersCountMolecule(memberCount = 123_456) } } From cd63ae816a02c41d2768afc50bb8600e413e6dfe Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 09:07:01 +0200 Subject: [PATCH 070/289] Fix Preview name --- .../features/invite/impl/response/AcceptDeclineInviteView.kt | 2 +- ..._AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png} | 0 ..._AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png} | 0 ..._AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png} | 0 ..._AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png} | 0 ..._AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png} | 0 11 files changed, 1 insertion(+), 1 deletion(-) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png} (100%) diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInviteView.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInviteView.kt index 53919dbac8..3f229fbe85 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInviteView.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInviteView.kt @@ -104,7 +104,7 @@ private fun DeclineConfirmationDialog( @PreviewsDayNight @Composable -internal fun AcceptDeclineInviteViewLightPreview(@PreviewParameter(AcceptDeclineInviteStateProvider::class) state: AcceptDeclineInviteState) = +internal fun AcceptDeclineInviteViewPreview(@PreviewParameter(AcceptDeclineInviteStateProvider::class) state: AcceptDeclineInviteState) = ElementPreview { AcceptDeclineInviteView( state = state, diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Day-0_1_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteViewLight-Night-0_2_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png From 82befcb92c02142b28d9bb6bed6a3b9e88581cf2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 09:58:58 +0200 Subject: [PATCH 071/289] Order import --- .../element/android/features/joinroom/impl/JoinRoomView.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 9c93105f9a..6802e7f77c 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -28,12 +28,12 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom -import io.element.android.libraries.designsystem.atomic.molecules.ButtonRowMolecule import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewDescriptionAtom -import io.element.android.libraries.designsystem.atomic.molecules.RoomPreviewMembersCountMolecule -import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewSubtitleAtom import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewTitleAtom +import io.element.android.libraries.designsystem.atomic.molecules.ButtonRowMolecule +import io.element.android.libraries.designsystem.atomic.molecules.RoomPreviewMembersCountMolecule +import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize From d2e043fbe40bc924a636f97daf9f7ed93fb71872 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 09:59:53 +0200 Subject: [PATCH 072/289] More complete preview --- .../features/joinroom/impl/JoinRoomStateProvider.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 7c34a05c6b..91c7ea1e37 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -37,7 +37,15 @@ open class JoinRoomStateProvider : PreviewParameterProvider { contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin) ), aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanKnock) + contentState = aLoadedContentState( + joinAuthorisationStatus = JoinAuthorisationStatus.CanKnock, + topic = "lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt" + + " ut labore et dolore magna aliqua ut enim ad minim veniam quis nostrud exercitation ullamco" + + " laboris nisi ut aliquip ex ea commodo consequat duis aute irure dolor in reprehenderit in" + + " voluptate velit esse cillum dolore eu fugiat nulla pariatur excepteur sint occaecat cupidatat" + + " non proident sunt in culpa qui officia deserunt mollit anim id est laborum", + numberOfMembers = 888, + ) ), aJoinRoomState( contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited) From b7f5c282b032dad6e481f692910fe01028c01b26 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Thu, 18 Apr 2024 08:11:24 +0000 Subject: [PATCH 073/289] Update screenshots --- ...cceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png} | 0 ...cceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png} | 0 ...eptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png} | 0 ...eptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png} | 0 ...eptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png} | 0 ...eptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png} | 0 ...eptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png} | 0 ...mView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 4 ++-- 12 files changed, 4 insertions(+), 4 deletions(-) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteViewLight_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png index 9206b1001e..89c7b10b91 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0ef19d140f808746f44b1801cc618048b9216a0e8413bb4ee5535a0cb8e9d80 -size 26590 +oid sha256:0fcfb2b5cc790707f48dbd56f2c3f4909ebe1ae93b082309e7b0b89e82fec6c8 +size 39320 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png index ef833bb514..083428a106 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9d39f1a58193367bc780fe9f266ca3b0f3f6ffbcf37c14441537aa7ee5f473c -size 25839 +oid sha256:e23f1d506bcfc603192d854945059b4f03e9215f20f3f7f9150728aee0c4bf7e +size 38085 From 4e55c9aa4e334c26a1b9c5ced8fd2a581477e4e8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 10:57:18 +0200 Subject: [PATCH 074/289] Please ktlint --- .../libraries/matrix/impl/RustMatrixClient.kt | 1 - .../impl/room/preview/RoomPreviewMapper.kt | 42 ------------------- 2 files changed, 43 deletions(-) delete mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index d27daaafdd..eae3095aae 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -61,7 +61,6 @@ import io.element.android.libraries.matrix.impl.room.RoomContentForwarder import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber import io.element.android.libraries.matrix.impl.room.RustMatrixRoom import io.element.android.libraries.matrix.impl.room.map -// TODO import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper import io.element.android.libraries.matrix.impl.roomdirectory.RustRoomDirectoryService import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt deleted file mode 100644 index 0497d8aeff..0000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.impl.room.preview - -// TODO Restore -// 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.room.preview.RoomPreview -// import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview -// -// object RoomPreviewMapper { -// fun map(roomPreview: RustRoomPreview): RoomPreview { -// return RoomPreview( -// roomId = RoomId(roomPreview.roomId), -// canonicalAlias = roomPreview.canonicalAlias?.let(::RoomAlias), -// name = roomPreview.name, -// topic = roomPreview.topic, -// avatarUrl = roomPreview.avatarUrl, -// numberOfJoinedMembers = roomPreview.numJoinedMembers.toLong(), -// roomType = roomPreview.roomType, -// isHistoryWorldReadable = roomPreview.isHistoryWorldReadable, -// isJoined = roomPreview.isJoined, -// isInvited = roomPreview.isInvited, -// isPublic = roomPreview.isPublic, -// canKnock = roomPreview.canKnock -// ) -// } -// } From 9c7c66b22228060b067e696b347207d45cd4877a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 11:17:30 +0200 Subject: [PATCH 075/289] Fix padding issue on `RoomPreviewMembersCountMolecule` --- .../atomic/molecules/RoomPreviewMembersCountMolecule.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt index a781c429b0..f39e3b19dc 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -42,8 +41,7 @@ fun RoomPreviewMembersCountMolecule( Row( modifier = modifier .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) - .widthIn(min = 48.dp) - .padding(start = 2.dp, end = 6.dp, top = 2.dp, bottom = 2.dp), + .padding(start = 2.dp, end = 8.dp, top = 2.dp, bottom = 2.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(4.dp) ) { From 2701a6f87da1705add8c187f6ea2080d7ae459dd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 11:45:42 +0200 Subject: [PATCH 076/289] Add UI test on JoinRoomView --- features/joinroom/impl/build.gradle.kts | 8 ++ .../joinroom/impl/JoinRoomViewTest.kt | 129 ++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt diff --git a/features/joinroom/impl/build.gradle.kts b/features/joinroom/impl/build.gradle.kts index 03d3051546..33fdbb6b47 100644 --- a/features/joinroom/impl/build.gradle.kts +++ b/features/joinroom/impl/build.gradle.kts @@ -23,6 +23,11 @@ plugins { android { namespace = "io.element.android.features.joinroom.impl" + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } } anvil { @@ -46,10 +51,13 @@ dependencies { testImplementation(libs.test.junit) testImplementation(libs.coroutines.test) testImplementation(libs.molecule.runtime) + testImplementation(libs.test.robolectric) testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(projects.libraries.matrix.test) testImplementation(projects.tests.testutils) + testImplementation(libs.androidx.compose.ui.test.junit) + testReleaseImplementation(libs.androidx.compose.ui.test.manifest) ksp(libs.showkase.processor) } diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt new file mode 100644 index 0000000000..a139808978 --- /dev/null +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.joinroom.impl + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.libraries.ui.strings.CommonStrings +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import io.element.android.tests.testutils.pressBack +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class JoinRoomViewTest { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `clicking on back invoke the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setJoinRoomView( + aJoinRoomState( + eventSink = eventsRecorder, + ), + onBackPressed = it + ) + rule.pressBack() + } + } + + @Test + fun `clicking on Join room on CanJoin room emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_join_room_join_action) + eventsRecorder.assertSingle(JoinRoomEvents.JoinRoom) + } + + @Test + fun `clicking on Knock room on CanKnock room emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanKnock), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_join_room_knock_action) + eventsRecorder.assertSingle(JoinRoomEvents.JoinRoom) + } + + @Test + fun `clicking on Accept invitationon IsInvited room emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_accept) + eventsRecorder.assertSingle(JoinRoomEvents.AcceptInvite) + } + + @Test + fun `clicking on Decline invitation on IsInvited room emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_decline) + eventsRecorder.assertSingle(JoinRoomEvents.DeclineInvite) + } + + @Test + fun `clicking on Retry when an error occurs emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aFailureContentState(), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_retry) + eventsRecorder.assertSingle(JoinRoomEvents.RetryFetchingContent) + } +} + +private fun AndroidComposeTestRule.setJoinRoomView( + state: JoinRoomState, + onBackPressed: () -> Unit = EnsureNeverCalled(), +) { + setContent { + JoinRoomView( + state = state, + onBackPressed = onBackPressed, + ) + } +} + From 50a011a0f384f92b1a223c1d76e867311e897c87 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 11:57:50 +0200 Subject: [PATCH 077/289] Add UI test on RoomAliasResolverView --- .../roomaliasresolver/impl/build.gradle.kts | 8 ++ .../impl/RoomAliasResolverViewTest.kt | 97 +++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt diff --git a/features/roomaliasresolver/impl/build.gradle.kts b/features/roomaliasresolver/impl/build.gradle.kts index eaf2773231..00be3b0076 100644 --- a/features/roomaliasresolver/impl/build.gradle.kts +++ b/features/roomaliasresolver/impl/build.gradle.kts @@ -23,6 +23,11 @@ plugins { android { namespace = "io.element.android.features.roomaliasresolver.impl" + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } } anvil { @@ -44,10 +49,13 @@ dependencies { testImplementation(libs.test.junit) testImplementation(libs.coroutines.test) testImplementation(libs.molecule.runtime) + testImplementation(libs.test.robolectric) testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(projects.libraries.matrix.test) testImplementation(projects.tests.testutils) + testImplementation(libs.androidx.compose.ui.test.junit) + testReleaseImplementation(libs.androidx.compose.ui.test.manifest) ksp(libs.showkase.processor) } diff --git a/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt new file mode 100644 index 0000000000..6df8a7849e --- /dev/null +++ b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomaliasresolver.impl + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.test.A_ROOM_ID +import io.element.android.libraries.ui.strings.CommonStrings +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EnsureNeverCalledWithParam +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import io.element.android.tests.testutils.ensureCalledOnceWithParam +import io.element.android.tests.testutils.pressBack +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class RoomAliasResolverViewTest { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `clicking on back invokes the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setRoomAliasResolverView( + aRoomAliasResolverState( + eventSink = eventsRecorder, + ), + onBackPressed = it + ) + rule.pressBack() + } + } + + @Test + fun `clicking on Retry emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setRoomAliasResolverView( + aRoomAliasResolverState( + resolveState = AsyncData.Failure(Exception("Error")), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_retry) + eventsRecorder.assertSingle(RoomAliasResolverEvents.Retry) + } + + @Test + fun `success state invokes the expected Callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnceWithParam(A_ROOM_ID) { + rule.setRoomAliasResolverView( + aRoomAliasResolverState( + resolveState = AsyncData.Success(A_ROOM_ID), + eventSink = eventsRecorder, + ), + onAliasResolved = it, + ) + } + } +} + +private fun AndroidComposeTestRule.setRoomAliasResolverView( + state: RoomAliasResolverState, + onBackPressed: () -> Unit = EnsureNeverCalled(), + onAliasResolved: (RoomId) -> Unit = EnsureNeverCalledWithParam(), +) { + setContent { + RoomAliasResolverView( + state = state, + onBackPressed = onBackPressed, + onAliasResolved = onAliasResolved, + ) + } +} From dc2dd436259ff8bb9efc441a40738e2ed2529f7b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 12:08:08 +0200 Subject: [PATCH 078/289] Use SuperButton on JoinRoomView, and set all button to size Large --- .../features/joinroom/impl/JoinRoomView.kt | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 6802e7f77c..d13fa3902b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -38,6 +38,7 @@ import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton +import io.element.android.libraries.designsystem.components.button.SuperButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Button @@ -97,7 +98,7 @@ private fun JoinRoomFooter( text = stringResource(CommonStrings.action_retry), onClick = onRetry, modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) } else { val joinAuthorisationStatus = state.joinAuthorisationStatus @@ -108,30 +109,33 @@ private fun JoinRoomFooter( text = stringResource(CommonStrings.action_decline), onClick = onDeclineInvite, modifier = Modifier.weight(1f), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) Button( text = stringResource(CommonStrings.action_accept), onClick = onAcceptInvite, modifier = Modifier.weight(1f), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) } } JoinAuthorisationStatus.CanJoin -> { - Button( - text = stringResource(R.string.screen_join_room_join_action), + SuperButton( onClick = onJoinRoom, modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, - ) + buttonSize = ButtonSize.Large, + ) { + Text( + text = stringResource(R.string.screen_join_room_join_action), + ) + } } JoinAuthorisationStatus.CanKnock -> { Button( text = stringResource(R.string.screen_join_room_knock_action), onClick = onJoinRoom, modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) } JoinAuthorisationStatus.Unknown -> Unit From 679e02b00cb8f95a84efd05f6b04de62da34395b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 12:04:12 +0200 Subject: [PATCH 079/289] Use Large button on RoomAliasResolverView --- .../features/roomaliasresolver/impl/RoomAliasResolverView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index 271baad845..72ce1978e1 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -92,7 +92,7 @@ private fun RoomAliasResolverFooter( state.eventSink(RoomAliasResolverEvents.Retry) }, modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) } is AsyncData.Loading -> { From 0d14cdcf5df19f564f18a5bb503c27b3efe77892 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 12:36:56 +0200 Subject: [PATCH 080/289] Use SuperButton for RoomDirectorySearchButton --- .../impl/search/RoomListSearchView.kt | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt index a3640d2d77..331ae66587 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt @@ -21,9 +21,12 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.ExperimentalMaterial3Api @@ -32,6 +35,7 @@ import androidx.compose.material3.TextFieldDefaults import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.focus.FocusRequester @@ -49,14 +53,15 @@ import io.element.android.features.roomlist.impl.components.RoomSummaryRow import io.element.android.features.roomlist.impl.contentType import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.libraries.designsystem.components.button.BackButton +import io.element.android.libraries.designsystem.components.button.SuperButton import io.element.android.libraries.designsystem.modifiers.applyIf import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.components.Button +import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconButton -import io.element.android.libraries.designsystem.theme.components.IconSource import io.element.android.libraries.designsystem.theme.components.Scaffold +import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextField import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.utils.copy @@ -179,8 +184,8 @@ private fun RoomListSearchContent( if (state.displayRoomDirectorySearch) { RoomDirectorySearchButton( modifier = Modifier - .fillMaxWidth() - .padding(vertical = 24.dp, horizontal = 16.dp), + .fillMaxWidth() + .padding(vertical = 24.dp, horizontal = 16.dp), onClick = onRoomDirectorySearchClicked ) } @@ -207,12 +212,24 @@ private fun RoomDirectorySearchButton( onClick: () -> Unit, modifier: Modifier = Modifier ) { - Button( - text = stringResource(id = R.string.screen_roomlist_room_directory_button_title), - leadingIcon = IconSource.Vector(CompoundIcons.ListBulleted()), + SuperButton( onClick = onClick, modifier = modifier, - ) + buttonSize = ButtonSize.Large, + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + imageVector = CompoundIcons.ListBulleted(), + contentDescription = null, + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = stringResource(R.string.screen_roomlist_room_directory_button_title), + ) + } + } } @PreviewsDayNight From c98cb56b7468b53ad2ff28b520ec35fbb5d03b6c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 13:08:56 +0200 Subject: [PATCH 081/289] Add first UI test on RoomListSearchView --- .../impl/search/RoomListSearchViewTest.kt | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt new file mode 100644 index 0000000000..0c437f8553 --- /dev/null +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomlist.impl.search + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.roomlist.impl.R +import io.element.android.features.roomlist.impl.RoomListEvents +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EnsureNeverCalledWithParam +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class RoomListSearchViewTest { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `clicking on 'Browse all rooms' invokes the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setRoomListSearchView( + aRoomListSearchState( + isSearchActive = true, + isRoomDirectorySearchEnabled = true, + eventSink = eventsRecorder, + ), + onRoomDirectorySearchClicked = it, + ) + rule.clickOn(R.string.screen_roomlist_room_directory_button_title) + } + } +} + +private fun AndroidComposeTestRule.setRoomListSearchView( + state: RoomListSearchState, + eventSink: (RoomListEvents) -> Unit = EventsRecorder(expectEvents = false), + onRoomClicked: (RoomId) -> Unit = EnsureNeverCalledWithParam(), + onRoomDirectorySearchClicked: () -> Unit = EnsureNeverCalled(), +) { + setContent { + RoomListSearchView( + state = state, + eventSink = eventSink, + onRoomClicked = onRoomClicked, + onRoomDirectorySearchClicked = onRoomDirectorySearchClicked, + ) + } +} + From 4fe7b601af8621b5c7fdb3bd7c3de0a816afe1bb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 14:08:18 +0200 Subject: [PATCH 082/289] Add Konsist check to ensure that '@PreviewLightDark' is not used. --- .../android/tests/konsist/KonsistPreviewTest.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index f82f4dac7c..04f5e2c0b3 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -16,8 +16,10 @@ package io.element.android.tests.konsist +import androidx.compose.ui.tooling.preview.PreviewLightDark import com.lemonappdev.konsist.api.Konsist import com.lemonappdev.konsist.api.ext.list.withAllAnnotationsOf +import com.lemonappdev.konsist.api.verify.assertEmpty import com.lemonappdev.konsist.api.verify.assertTrue import io.element.android.libraries.designsystem.preview.PreviewsDayNight import org.junit.Test @@ -57,4 +59,15 @@ class KonsistPreviewTest { it.hasInternalModifier } } + + @Test + fun `Ensure that '@PreviewLightDark' is not used`() { + Konsist + .scopeFromProject() + .functions() + .withAllAnnotationsOf(PreviewLightDark::class) + .assertEmpty( + additionalMessage = "Use '@PreviewsDayNight' instead of '@PreviewLightDark', or else screenshot(s) will not be generated.", + ) + } } From c02d5daf7d6f87efcf8a929d89965054b18a4afa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 14:31:38 +0200 Subject: [PATCH 083/289] Improve anInviteSender() and use it in RoomListStateProvider. --- .../features/roomlist/impl/RoomListStateProvider.kt | 8 ++------ .../impl/model/RoomListRoomSummaryProvider.kt | 13 +++++++------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index bdc8938503..bf73a74ef8 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -23,10 +23,10 @@ import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState import io.element.android.features.roomlist.impl.filters.RoomListFiltersState import io.element.android.features.roomlist.impl.filters.aRoomListFiltersState -import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.features.roomlist.impl.model.aRoomListRoomSummary +import io.element.android.features.roomlist.impl.model.anInviteSender import io.element.android.features.roomlist.impl.search.RoomListSearchState import io.element.android.features.roomlist.impl.search.aRoomListSearchState import io.element.android.libraries.designsystem.components.avatar.AvatarData @@ -88,11 +88,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { name = "Room Invited", avatarData = AvatarData("!roomId", "Room with Alice and Bob", size = AvatarSize.RoomListItem), id = "!roomId:domain", - inviteSender = InviteSender( - userId = UserId("@bob:domain"), - displayName = "Bob", - avatarData = AvatarData("@bob:domain", "Bob", size = AvatarSize.InviteSender), - ), + inviteSender = anInviteSender(), displayType = RoomSummaryDisplayType.INVITE, ), aRoomListRoomSummary( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 7691fab188..25e0a35d25 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -86,7 +86,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider Date: Thu, 18 Apr 2024 14:46:12 +0200 Subject: [PATCH 084/289] Move InviteSender to `:library:matrixui` module. --- .../features/roomlist/impl/components/RoomSummaryRow.kt | 2 +- .../roomlist/impl/datasource/RoomListRoomSummaryFactory.kt | 2 +- .../features/roomlist/impl/model/RoomListRoomSummary.kt | 3 ++- .../roomlist/impl/model/RoomListRoomSummaryProvider.kt | 1 + .../android/libraries/matrix/ui/components}/InviteSender.kt | 4 ++-- libraries/matrixui/src/main/res/values/localazy.xml | 4 ++++ tools/localazy/config.json | 6 ++++++ 7 files changed, 17 insertions(+), 5 deletions(-) rename {features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model => libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components}/InviteSender.kt (95%) create mode 100644 libraries/matrixui/src/main/res/values/localazy.xml diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 92616f460e..5ff4c5b477 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -47,7 +47,6 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.roomlist.impl.RoomListEvents -import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryProvider import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType @@ -67,6 +66,7 @@ import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.unreadIndicator import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.ui.components.InviteSender import io.element.android.libraries.ui.strings.CommonStrings import timber.log.Timber diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt index 541d3a265c..74af42aaa0 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt @@ -16,7 +16,6 @@ package io.element.android.features.roomlist.impl.datasource -import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.libraries.core.extensions.orEmpty @@ -27,6 +26,7 @@ import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.roomlist.RoomSummary +import io.element.android.libraries.matrix.ui.components.InviteSender import javax.inject.Inject class RoomListRoomSummaryFactory @Inject constructor( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index 741da3adcc..ab24071ecc 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -21,6 +21,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarData 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.room.RoomNotificationMode +import io.element.android.libraries.matrix.ui.components.InviteSender @Immutable data class RoomListRoomSummary( @@ -42,7 +43,7 @@ data class RoomListRoomSummary( val isDm: Boolean, val isFavorite: Boolean, val inviteSender: InviteSender?, - ) { +) { val isHighlighted = userDefinedNotificationMode != RoomNotificationMode.MUTE && (numberOfUnreadNotifications > 0 || numberOfUnreadMentions > 0) || isMarkedUnread || diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 25e0a35d25..7031a40c33 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -23,6 +23,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.core.UserId import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.ui.components.InviteSender open class RoomListRoomSummaryProvider : PreviewParameterProvider { override val values: Sequence diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt similarity index 95% rename from features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt index 64a47d5072..91c3e6ff40 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.roomlist.impl.model +package io.element.android.libraries.matrix.ui.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -24,9 +24,9 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight -import io.element.android.features.roomlist.impl.R import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.ui.R @Immutable data class InviteSender( diff --git a/libraries/matrixui/src/main/res/values/localazy.xml b/libraries/matrixui/src/main/res/values/localazy.xml new file mode 100644 index 0000000000..80939a8863 --- /dev/null +++ b/libraries/matrixui/src/main/res/values/localazy.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) invited you" + diff --git a/tools/localazy/config.json b/tools/localazy/config.json index 7d546df8ae..70eb82cdee 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -224,6 +224,12 @@ "troubleshoot_notifications_screen_.*" ] }, + { + "name" : ":libraries:matrixui", + "includeRegex" : [ + "screen_invites_invited_you" + ] + }, { "name" : ":features:call", "includeRegex" : [ From 473f0e839525149a68f26daab032ac3f9651b9c8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:19:03 +0200 Subject: [PATCH 085/289] Let JoinRoomView render the InviteSender --- .../joinroom/impl/JoinRoomPresenter.kt | 32 +++++++-- .../features/joinroom/impl/JoinRoomState.kt | 11 +-- .../joinroom/impl/JoinRoomStateProvider.kt | 19 +++++- .../features/joinroom/impl/JoinRoomView.kt | 16 ++++- .../joinroom/impl/JoinRoomPresenterTest.kt | 2 +- .../joinroom/impl/JoinRoomViewTest.kt | 4 +- .../impl/components/RoomSummaryRow.kt | 26 ++----- .../datasource/RoomListRoomSummaryFactory.kt | 15 +--- .../impl/model/RoomListRoomSummary.kt | 2 +- .../impl/model/RoomListRoomSummaryProvider.kt | 2 +- .../matrix/ui/components/InviteSenderView.kt | 68 +++++++++++++++++++ .../ui/{components => model}/InviteSender.kt | 15 +++- 12 files changed, 159 insertions(+), 53 deletions(-) create mode 100644 libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt rename libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/{components => model}/InviteSender.kt (81%) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 93399b0446..8e85b846cc 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -38,7 +38,11 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.ui.model.InviteSender +import io.element.android.libraries.matrix.ui.model.toInviteSender +import kotlinx.coroutines.flow.first import java.util.Optional +import kotlin.jvm.optionals.getOrNull class JoinRoomPresenter @AssistedInject constructor( @Assisted private val roomId: RoomId, @@ -74,10 +78,22 @@ class JoinRoomPresenter @AssistedInject constructor( else -> { value = ContentState.Loading(roomIdOrAlias) val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) - value = result.fold( - onSuccess = { it.toContentState() }, + result.fold( + onSuccess = { + value = it.toContentState(null) + if (it.isInvited) { + // Get the inviteSender + matrixClient.getRoomInfoFlow(roomId).first() + .getOrNull() + ?.inviter + ?.toInviteSender() + ?.let { inviteSender -> + value = it.toContentState(inviteSender) + } + } + }, onFailure = { throwable -> - if (throwable.message?.contains("403") == true) { + value = if (throwable.message?.contains("403") == true) { ContentState.UnknownRoom(roomIdOrAlias) } else { ContentState.Failure(roomIdOrAlias, throwable) @@ -118,7 +134,9 @@ class JoinRoomPresenter @AssistedInject constructor( } } -private fun RoomPreview.toContentState(): ContentState { +private fun RoomPreview.toContentState( + inviteSender: InviteSender? +): ContentState { return ContentState.Loaded( roomId = roomId, name = name, @@ -128,7 +146,7 @@ private fun RoomPreview.toContentState(): ContentState { isDirect = false, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when { - isInvited -> JoinAuthorisationStatus.IsInvited + isInvited -> JoinAuthorisationStatus.IsInvited(inviteSender) canKnock -> JoinAuthorisationStatus.CanKnock isPublic -> JoinAuthorisationStatus.CanJoin else -> JoinAuthorisationStatus.Unknown @@ -165,7 +183,9 @@ internal fun MatrixRoomInfo.toContentState(): ContentState { isDirect = isDirect, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when { - currentUserMembership == CurrentUserMembership.INVITED -> JoinAuthorisationStatus.IsInvited + currentUserMembership == CurrentUserMembership.INVITED -> JoinAuthorisationStatus.IsInvited( + inviteSender = inviter?.toInviteSender() + ) isPublic -> JoinAuthorisationStatus.CanJoin else -> JoinAuthorisationStatus.Unknown } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 4d91135e9a..14f0cf2012 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -23,6 +23,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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.core.RoomIdOrAlias +import io.element.android.libraries.matrix.ui.model.InviteSender @Immutable data class JoinRoomState( @@ -71,9 +72,9 @@ sealed interface ContentState { } } -enum class JoinAuthorisationStatus { - IsInvited, - CanKnock, - CanJoin, - Unknown, +sealed interface JoinAuthorisationStatus { + data class IsInvited(val inviteSender: InviteSender?) : JoinAuthorisationStatus + data object CanKnock : JoinAuthorisationStatus + data object CanJoin : JoinAuthorisationStatus + data object Unknown : JoinAuthorisationStatus } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 91c7ea1e37..9fec1683be 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -19,10 +19,14 @@ package io.element.android.features.joinroom.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState +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.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias +import io.element.android.libraries.matrix.ui.model.InviteSender open class JoinRoomStateProvider : PreviewParameterProvider { override val values: Sequence @@ -48,7 +52,10 @@ open class JoinRoomStateProvider : PreviewParameterProvider { ) ), aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited) + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)) + ), + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(anInviteSender())) ), aJoinRoomState( contentState = aFailureContentState() @@ -102,5 +109,15 @@ fun aJoinRoomState( eventSink = eventSink ) +internal fun anInviteSender( + userId: UserId = UserId("@bob:domain"), + displayName: String = "Bob", + avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender), +) = InviteSender( + userId = userId, + displayName = displayName, + avatarData = avatarData, +) + private val A_ROOM_ID = RoomId("!exa:matrix.org") private val A_ROOM_ALIAS = RoomAlias("#exa:matrix.org") diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index d13fa3902b..f0e947014a 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -17,11 +17,13 @@ package io.element.android.features.joinroom.impl import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -47,6 +49,7 @@ import io.element.android.libraries.designsystem.theme.components.OutlinedButton 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.core.RoomIdOrAlias +import io.element.android.libraries.matrix.ui.components.InviteSenderView import io.element.android.libraries.ui.strings.CommonStrings @Composable @@ -103,7 +106,7 @@ private fun JoinRoomFooter( } else { val joinAuthorisationStatus = state.joinAuthorisationStatus when (joinAuthorisationStatus) { - JoinAuthorisationStatus.IsInvited -> { + is JoinAuthorisationStatus.IsInvited -> { ButtonRowMolecule(modifier = modifier, horizontalArrangement = Arrangement.spacedBy(20.dp)) { OutlinedButton( text = stringResource(CommonStrings.action_decline), @@ -159,7 +162,16 @@ private fun JoinRoomContent( RoomPreviewTitleAtom(contentState.computedTitle) }, subtitle = { - RoomPreviewSubtitleAtom(contentState.computedSubtitle) + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + RoomPreviewSubtitleAtom(contentState.computedSubtitle) + val inviteSender = (contentState.joinAuthorisationStatus as? JoinAuthorisationStatus.IsInvited)?.inviteSender + if (inviteSender != null) { + InviteSenderView(inviteSender = inviteSender) + } + } }, description = { RoomPreviewDescriptionAtom(contentState.topic ?: "") diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index ff5a1b10b2..e2fa92a8a3 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -101,7 +101,7 @@ class JoinRoomPresenterTest { presenter.test { skipItems(1) awaitItem().also { state -> - assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.IsInvited) + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.IsInvited(null)) } } } diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt index a139808978..c8415e4b26 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -80,7 +80,7 @@ class JoinRoomViewTest { val eventsRecorder = EventsRecorder() rule.setJoinRoomView( aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited), + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)), eventSink = eventsRecorder, ), ) @@ -93,7 +93,7 @@ class JoinRoomViewTest { val eventsRecorder = EventsRecorder() rule.setJoinRoomView( aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited), + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)), eventSink = eventsRecorder, ), ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 5ff4c5b477..77a93c46c1 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -66,7 +66,8 @@ import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.unreadIndicator import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.room.RoomNotificationMode -import io.element.android.libraries.matrix.ui.components.InviteSender +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 import timber.log.Timber @@ -96,7 +97,10 @@ internal fun RoomSummaryRow( InviteSubtitle(isDirect = room.isDirect, inviteSender = room.inviteSender, canonicalAlias = room.canonicalAlias) if (!room.isDirect && room.inviteSender != null) { Spacer(modifier = Modifier.height(4.dp)) - InviteSenderRow(sender = room.inviteSender) + InviteSenderView( + modifier = Modifier.fillMaxWidth(), + inviteSender = room.inviteSender, + ) } Spacer(modifier = Modifier.height(12.dp)) InviteButtonsRow( @@ -290,24 +294,6 @@ private fun InviteNameAndIndicatorRow( } } -@Composable -private fun InviteSenderRow( - sender: InviteSender, - modifier: Modifier = Modifier -) { - Row( - horizontalArrangement = Arrangement.spacedBy(4.dp), - modifier = modifier.fillMaxWidth(), - ) { - Avatar(avatarData = sender.avatarData) - Text( - text = sender.annotatedString(), - style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, - ) - } -} - @Composable private fun InviteButtonsRow( onAcceptClicked: () -> Unit, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt index 74af42aaa0..80232563ed 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt @@ -26,7 +26,7 @@ import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.roomlist.RoomSummary -import io.element.android.libraries.matrix.ui.components.InviteSender +import io.element.android.libraries.matrix.ui.model.toInviteSender import javax.inject.Inject class RoomListRoomSummaryFactory @Inject constructor( @@ -83,18 +83,7 @@ class RoomListRoomSummaryFactory @Inject constructor( hasRoomCall = roomSummary.details.hasRoomCall, isDirect = roomSummary.details.isDirect, isFavorite = roomSummary.details.isFavorite, - inviteSender = roomSummary.details.inviter?.run { - InviteSender( - userId = userId, - displayName = displayName ?: "", - avatarData = AvatarData( - id = userId.value, - name = displayName, - url = avatarUrl, - size = AvatarSize.InviteSender, - ), - ) - }, + inviteSender = roomSummary.details.inviter?.toInviteSender(), isDm = roomSummary.details.isDm, canonicalAlias = roomSummary.details.canonicalAlias, displayType = if (roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED) { diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index ab24071ecc..84c4cd45c3 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -21,7 +21,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarData 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.room.RoomNotificationMode -import io.element.android.libraries.matrix.ui.components.InviteSender +import io.element.android.libraries.matrix.ui.model.InviteSender @Immutable data class RoomListRoomSummary( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 7031a40c33..005044e60d 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -23,7 +23,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.core.UserId import io.element.android.libraries.matrix.api.room.RoomNotificationMode -import io.element.android.libraries.matrix.ui.components.InviteSender +import io.element.android.libraries.matrix.ui.model.InviteSender open class RoomListRoomSummaryProvider : PreviewParameterProvider { override val values: Sequence diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt new file mode 100644 index 0000000000..6e5590e1a2 --- /dev/null +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.ui.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.components.avatar.Avatar +import io.element.android.libraries.designsystem.components.avatar.AvatarData +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 +import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.ui.model.InviteSender + +@Composable +fun InviteSenderView( + inviteSender: InviteSender, + modifier: Modifier = Modifier +) { + Row( + horizontalArrangement = Arrangement.spacedBy(4.dp), + modifier = modifier, + ) { + Avatar(avatarData = inviteSender.avatarData) + Text( + text = inviteSender.annotatedString(), + style = ElementTheme.typography.fontBodyMdRegular, + color = MaterialTheme.colorScheme.secondary, + ) + } +} + +@PreviewsDayNight +@Composable +internal fun InviteSenderViewPreview() = ElementPreview { + InviteSenderView( + inviteSender = InviteSender( + userId = UserId("@bob:example.com"), + displayName = "Bob", + avatarData = AvatarData( + id = "@bob:example.com", + name = "Bob", + url = null, + size = AvatarSize.InviteSender + ) + ) + ) +} diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt similarity index 81% rename from libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt index 91c3e6ff40..410fb7edbd 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.matrix.ui.components +package io.element.android.libraries.matrix.ui.model import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -25,7 +25,9 @@ import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight 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.core.UserId +import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.ui.R @Immutable @@ -54,3 +56,14 @@ data class InviteSender( } } } + +fun RoomMember.toInviteSender() = InviteSender( + userId = userId, + displayName = displayName ?: "", + avatarData = AvatarData( + id = userId.value, + name = displayName, + url = avatarUrl, + size = AvatarSize.InviteSender, + ), +) From 49fea8b7ae0e2895e5e75836554d58a30834c621 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:22:30 +0200 Subject: [PATCH 086/289] Fix vertical alignment. --- libraries/matrixui/build.gradle.kts | 1 + .../android/libraries/matrix/ui/components/InviteSenderView.kt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/libraries/matrixui/build.gradle.kts b/libraries/matrixui/build.gradle.kts index fa7a946959..6d955a7c05 100644 --- a/libraries/matrixui/build.gradle.kts +++ b/libraries/matrixui/build.gradle.kts @@ -34,6 +34,7 @@ dependencies { anvil(projects.anvilcodegen) implementation(projects.libraries.di) implementation(projects.libraries.architecture) + implementation(projects.libraries.androidutils) implementation(projects.libraries.matrix.api) implementation(projects.libraries.designsystem) implementation(projects.libraries.core) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt index 6e5590e1a2..9ff54aa496 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme @@ -39,6 +40,7 @@ fun InviteSenderView( ) { Row( horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically, modifier = modifier, ) { Avatar(avatarData = inviteSender.avatarData) From ebcca392b42fee52116fd8a2edcfe3c1d7e46131 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:43:44 +0200 Subject: [PATCH 087/289] SDK 0.2.15 (commit will be dropped) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 534766c880..990ac198ae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -154,7 +154,7 @@ jsoup = "org.jsoup:jsoup:1.17.2" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:1.4.2" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.14" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.15" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } From 64e22bc2f1ee7e04932e5959bed8e4e74932fda2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:45:19 +0200 Subject: [PATCH 088/289] Use now available SDK API. --- .../libraries/matrix/impl/RustMatrixClient.kt | 11 ++--- .../impl/room/preview/RoomPreviewMapper.kt | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index eae3095aae..48683d77ba 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -61,6 +61,7 @@ import io.element.android.libraries.matrix.impl.room.RoomContentForwarder import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber import io.element.android.libraries.matrix.impl.room.RustMatrixRoom import io.element.android.libraries.matrix.impl.room.map +import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper import io.element.android.libraries.matrix.impl.roomdirectory.RustRoomDirectoryService import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService @@ -463,21 +464,15 @@ class RustMatrixClient( } } - @Suppress("TooGenericExceptionThrown") override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = withContext(sessionDispatcher) { runCatching { - // TODO Waiting for SDK to be released - throw Exception("Not implemented") - // client.resolveRoomAlias(roomAlias.value).let(::RoomId) + client.resolveRoomAlias(roomAlias.value).let(::RoomId) } } - @Suppress("TooGenericExceptionThrown") override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result = withContext(sessionDispatcher) { runCatching { - // TODO Waiting for SDK to be released - throw Exception("Not implemented") - // client.getRoomPreview(roomIdOrAlias.identifier).let(RoomPreviewMapper::map) + client.getRoomPreview(roomIdOrAlias.identifier).let(RoomPreviewMapper::map) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt new file mode 100644 index 0000000000..75286becda --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.room.preview + +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.room.preview.RoomPreview +import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview + +object RoomPreviewMapper { + fun map(roomPreview: RustRoomPreview): RoomPreview { + return RoomPreview( + roomId = RoomId(roomPreview.roomId), + canonicalAlias = roomPreview.canonicalAlias?.let(::RoomAlias), + name = roomPreview.name, + topic = roomPreview.topic, + avatarUrl = roomPreview.avatarUrl, + numberOfJoinedMembers = roomPreview.numJoinedMembers.toLong(), + roomType = roomPreview.roomType, + isHistoryWorldReadable = roomPreview.isHistoryWorldReadable, + isJoined = roomPreview.isJoined, + isInvited = roomPreview.isInvited, + isPublic = roomPreview.isPublic, + canKnock = roomPreview.canKnock + ) + } +} From 6d41f67c755d431c5e8349fcd6e33a76f6c472ff Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:50:51 +0200 Subject: [PATCH 089/289] Improve layout of inviter in RoomJoinView. --- .../features/joinroom/impl/JoinRoomStateProvider.kt | 5 ++++- .../android/features/joinroom/impl/JoinRoomView.kt | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 9fec1683be..9afd4dd797 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -55,7 +55,10 @@ open class JoinRoomStateProvider : PreviewParameterProvider { contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)) ), aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(anInviteSender())) + contentState = aLoadedContentState( + numberOfMembers = 123, + joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(anInviteSender()), + ) ), aJoinRoomState( contentState = aFailureContentState() diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index f0e947014a..567a63025d 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -162,20 +162,20 @@ private fun JoinRoomContent( RoomPreviewTitleAtom(contentState.computedTitle) }, subtitle = { + RoomPreviewSubtitleAtom(contentState.computedSubtitle) + }, + description = { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(8.dp), ) { - RoomPreviewSubtitleAtom(contentState.computedSubtitle) val inviteSender = (contentState.joinAuthorisationStatus as? JoinAuthorisationStatus.IsInvited)?.inviteSender if (inviteSender != null) { InviteSenderView(inviteSender = inviteSender) } + RoomPreviewDescriptionAtom(contentState.topic ?: "") } }, - description = { - RoomPreviewDescriptionAtom(contentState.topic ?: "") - }, memberCount = { if (contentState.showMemberCount) { RoomPreviewMembersCountMolecule(memberCount = contentState.numberOfMembers ?: 0) From 57870fa62419c2b6eb9c3a4417120c1321e33d2b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 17:19:44 +0200 Subject: [PATCH 090/289] Gradient Background --- .../background/LightGradientBackground.kt | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt new file mode 100644 index 0000000000..89eede3bc0 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.background + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.geometry.center +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.RadialGradientShader +import androidx.compose.ui.graphics.Shader +import androidx.compose.ui.graphics.ShaderBrush +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight + +class LightGradientBackground( + private val firstColor: Color = Color(0x1E0DBD8B), + private val secondColor: Color = Color(0x001273EB), + private val ratio: Float = 642 / 775f, +) : ShaderBrush() { + override fun createShader(size: Size): Shader { + val biggerDimension = size.width * 1.98f + return RadialGradientShader( + colors = listOf(firstColor, secondColor), + center = size.center.copy(x = size.width * ratio, y = size.height * ratio), + radius = biggerDimension / 2f, + colorStops = listOf(0f, 0.95f) + ) + } +} + +@PreviewsDayNight +@Composable +internal fun LightGradientBackgroundPreview() = ElementPreview { + val gradientBackground = remember { + LightGradientBackground() + } + Box( + modifier = Modifier + .fillMaxSize() + .background(gradientBackground) + ) +} From 4489df10854e5757488fbd881a36b314281f412d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 17:47:20 +0200 Subject: [PATCH 091/289] Apply Gradient Background to JoinRoomView and RoomAliasResolverView. --- .../android/features/joinroom/impl/JoinRoomView.kt | 8 +++++++- .../roomaliasresolver/impl/RoomAliasResolverView.kt | 9 +++++++-- .../designsystem/atomic/pages/HeaderFooterPage.kt | 4 ++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 567a63025d..f9bc97231b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -16,6 +16,7 @@ package io.element.android.features.joinroom.impl +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -23,8 +24,10 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter @@ -37,6 +40,7 @@ import io.element.android.libraries.designsystem.atomic.molecules.ButtonRowMolec import io.element.android.libraries.designsystem.atomic.molecules.RoomPreviewMembersCountMolecule import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage +import io.element.android.libraries.designsystem.background.LightGradientBackground import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton @@ -58,8 +62,10 @@ fun JoinRoomView( onBackPressed: () -> Unit, modifier: Modifier = Modifier, ) { + val gradientBackground = remember { LightGradientBackground() } HeaderFooterPage( - modifier = modifier, + modifier = modifier.background(gradientBackground), + containerColor = Color.Transparent, paddingValues = PaddingValues(16.dp), topBar = { JoinRoomTopBar(onBackClicked = onBackPressed) diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index 72ce1978e1..e12ef4170d 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -16,6 +16,7 @@ package io.element.android.features.roomaliasresolver.impl +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row @@ -25,8 +26,10 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter @@ -36,6 +39,7 @@ import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewTitleAtom import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage +import io.element.android.libraries.designsystem.background.LightGradientBackground import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview @@ -61,9 +65,10 @@ fun RoomAliasResolverView( latestOnAliasResolved(state.resolveState.data) } } - + val gradientBackground = remember { LightGradientBackground() } HeaderFooterPage( - modifier = modifier, + modifier = modifier.background(gradientBackground), + containerColor = Color.Transparent, paddingValues = PaddingValues(16.dp), topBar = { RoomAliasResolverTopBar(onBackClicked = onBackPressed) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt index 3cae67cb1b..f36d17a08d 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt @@ -23,9 +23,11 @@ import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.preview.ElementPreview @@ -46,6 +48,7 @@ import io.element.android.libraries.designsystem.theme.components.Text fun HeaderFooterPage( modifier: Modifier = Modifier, paddingValues: PaddingValues = PaddingValues(20.dp), + containerColor: Color = MaterialTheme.colorScheme.background, background: @Composable () -> Unit = {}, topBar: @Composable () -> Unit = {}, header: @Composable () -> Unit = {}, @@ -55,6 +58,7 @@ fun HeaderFooterPage( Scaffold( modifier = modifier, topBar = topBar, + containerColor = containerColor, ) { padding -> Box { background() From 8cd64d5a6f4d862d22becae1064bb9144e22e315 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Thu, 18 Apr 2024 15:57:22 +0000 Subject: [PATCH 092/289] Update screenshots --- ...mView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png | 3 +++ ...l_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...l_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...l_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...ull_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...l_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...ow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png | 4 ++-- ...null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png | 4 ++-- ...stSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...stSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...SearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...SearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...tView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...tView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...tView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png | 2 +- ...tView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png | 2 +- ...iew_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...PreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png | 4 ++-- ...eviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png | 4 ++-- ...ull_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...l_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png | 3 +++ ...w_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png | 3 +++ ...rixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en].png} | 0 ...xUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en].png} | 0 ..._null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en].png} | 0 ..._null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en].png} | 0 ...ull_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en].png} | 0 ...ull_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en].png} | 0 ...Row_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en].png} | 0 ...Row_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en].png} | 0 ...w_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en].png} | 0 ...w_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en].png} | 0 ...edRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png} | 0 ...Room_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png} | 0 ...SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png} | 0 ...ectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png} | 0 ...edUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png} | 0 ...User_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png} | 0 ..._null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png} | 0 ...ull_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png} | 0 ...tar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en].png} | 0 ...r_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en].png} | 0 66 files changed, 96 insertions(+), 78 deletions(-) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-3_4_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-3_5_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-5_6_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-5_7_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-7_8_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-7_9_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-6_7_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-6_8_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-8_9_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-8_10_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-9_10_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-9_11_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en].png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png index dc80770d93..780d5d96ba 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7406a2a6fa8e4dd4423a5141147ecc1aa235d4dbff980b7ef72fa2e59f502fc -size 7686 +oid sha256:a6e8a01993250ab9e5ecc869cedcd0b8f210bbe08623fbb55a1b8b0863bebb22 +size 125916 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png index e3c12ee174..01d0114013 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:329ade4a3d0e1b013f03bf5d2d107ce2dacc235f7e2defc24c5cd1623330b107 -size 23944 +oid sha256:d7c1c180f53b948992d1f14d9635bcfee13fad55e772c9d74af62a747928a540 +size 143814 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png index 4ce8f03332..483a0e615c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ed85e4bb1351a1af82b64628c35aff7ef165c9df9b1ac0e1bba737a9d1e15a8 -size 25797 +oid sha256:1dc731d4a0c2aeb383035b3781f1e319fe34445e83324458e997df22a3d09bdc +size 145241 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png index 89c7b10b91..b209283185 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fcfb2b5cc790707f48dbd56f2c3f4909ebe1ae93b082309e7b0b89e82fec6c8 -size 39320 +oid sha256:2678e82f1e260b67ebbca47b41a0283d89bbc1799905c32f4e90821d7f41ce6c +size 148232 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png index d681433b5c..f9433453ec 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ba446e166858f6da8d79ae4af997ff142d73edebf178aadf75579b041a3d267 -size 28605 +oid sha256:3da95310c379b64cece500e9a942170f227dfe4c9d856690d2343ae9aaf47dc5 +size 144682 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png index f30069d89c..db53b3b31d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c34154223d9eef3a66fbc9c266010e3e51b293db7f4698d550638fa8912a231 -size 16864 +oid sha256:2128dda46d28adeabcd77ae254b98e5305c48cfc4578b53bd4b91c222a129e39 +size 151787 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png index 45d13a7673..c1f86c1efd 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e70d55552b46b1a34848651bf8bcf8048ba2d28c7d2d356f8c1a0f71bb6e049 -size 21104 +oid sha256:0134f458078bde571001caea88804e35e50dc89c4975bf4c7b86582662e63b08 +size 125696 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f5bbcd0456 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1eae5de422832fbe03a5ba5ed8281492c2bd4ad926330fac4759bec4b31943a8 +size 130094 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png index 2cec18ce5d..dff28c02ee 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa320f4667087c59776d08dfb9108a577e42eb51ba1e6b3d3ea6da3d55605495 -size 7523 +oid sha256:ded3501ef083c6b8ac2da5259fab157c65dec8034e1d1fe7b03fbe826a11ebad +size 109459 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png index cfafbbd9c2..98c6e9f858 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4244c5d24935e2cf6df3cff5d31eb7980757a1e555aedbb97561c1827778e2b -size 22816 +oid sha256:f7a49f72bcf030670dd014469cf906a7097c07d6fad17149edee92f128ab2dc6 +size 125866 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png index 219b7b1ebe..f0e6548310 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3725b3e21eb939bebcc44b9c62f21817f1ab227dc7a9f2367b721cdb0e750720 -size 25127 +oid sha256:c134bdb3e372eeaedc3669aaf92486cbb253fcf41b0023c03743bf7e61c72456 +size 129893 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png index 083428a106..8e5203848d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e23f1d506bcfc603192d854945059b4f03e9215f20f3f7f9150728aee0c4bf7e -size 38085 +oid sha256:2af528ba157c4eb2f779e50dd3b95d190c0c68aaa96899ebfa7bc9c843469b00 +size 131811 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png index 77af4a413d..937c1ce423 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89c6f6644f84fc98ee0a0ced85f141cc862b1c114b2ca29874696f655926b4f2 -size 27539 +oid sha256:124a10348cdf9e3e5aba4bbc89c93a1af30e38f58f3e44b2255e705abe5c0c8c +size 127801 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png index 09bf86e31a..1ed50b5f83 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49c58bd2bbc86105e547bddf47c69df0017d6a4a66be0dc3f80e8cecfacf7a86 -size 15837 +oid sha256:ae55c1be7450df7cfd40ae931af2a59b9fe8adbde79e83a3cf395a435a7b534f +size 135115 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png index 4a2e191087..e352099a7e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:740d856d28b44200e7148d297103f8c38e2159c75e182c84f1d3d0d32cfff1bf -size 19529 +oid sha256:23826df8b3dde24c1592bf2b9160ffb3995cee09e3e704789ec9fa8bbaa42db2 +size 109429 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c31183bd3e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22ba97c9a23956b7e3d4a721a34e6c0577c28acf2a7b8a1f58e31298d05b5085 +size 113466 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png index fc7d210706..ab62026f26 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9651397f53e398e05c27f41f341d1ae949fbdbce05e97083bb9aef909f67fbaf -size 11783 +oid sha256:41e7732084d84eca5fc002210fd5cba3f7cd181eab1c1dc72b9fe672a861f1f8 +size 131980 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png index 774701a753..cc501fc03b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63c9d5c445abb20a80b45100afc59b6803f5744a9a6f83ce3d91653801fdd3eb -size 13455 +oid sha256:8f23e1f04cb1fe9ff532b1bef04da3f61cf66a2ae468a4865c9ceceba12e36c2 +size 133562 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png index c060f1dbcf..bb73416fd2 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dfc692c20e4b8998a675b72cac9b324da4ec636df68a5611ceaa368217e50243 -size 19618 +oid sha256:8f53c21157a6c5ccd9afe9a28154714ad97f16cffaa8d6eb41834653b217d6af +size 128419 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png index 0dcdf1c87d..6e0673e506 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15efd8dc8b74d3e5364b3f9204a5e85e0cff8689d3b632a61368e101b2e833ae -size 11099 +oid sha256:f9f9b0ab31815d16a4550f78380343214ee4f53f2fd070c3a1070796531d6662 +size 114522 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png index 08924db96b..025b05346f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18cc9896eadf78db99e6f8a96ab67a2af22ce1f7072f84cd97dee6e50fd474b2 -size 12736 +oid sha256:b51f473b67d4d444819b373880baefd17f091056bcc72d19eab70364d0cde0c8 +size 116158 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png index d0608de0b7..f8a3bc2761 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7db045b1e7877a6ee7b51e3996d43bcaee22ae930ade59701fd07f7a6b0eabf -size 18250 +oid sha256:03083a5d9c59711d6db23b1e150a01f4de53cdaca22c2ab2c09bf225fb91efd6 +size 111907 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png index 0d42f642af..4121d144b3 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4efec5e5b41fe5b51aaf55bd6d1b4466cef98bea89b2bd1cdc385ef02bc38903 -size 44382 +oid sha256:08a59921cc9b6a19f66655412827bc0cf9dc902bc5e8db56a41c2484fc0468c3 +size 44381 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png index 97e8cc0dcf..d016536165 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12f219b2949bdb38cb02cec442796022b92adeaa39ccde06e40ea7ce91192545 -size 43679 +oid sha256:bb14249c640d8b88865fe7aaae62f55b862475a555007f5b51c1dc778d9e8f33 +size 43701 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png index 03d7ad2621..99fca8cb85 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1edf88cfd802b426e03c600b225fc0a6c97605809ee75da9c8f742dc62ece36d -size 24554 +oid sha256:cf3f468d3b448561fd6b91a66ffdb3ce664e67ba17b5426df32051e672a6b1da +size 24545 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png index 783bc66497..3727a5744f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17595de1e00e0677ba42985f0ad0f68f2799c63323bbe97c7bc16b7a8ace17ed -size 23891 +oid sha256:55c60a529e8c9230b39ae919faf9d72978f37452846560ca4df1b784c7d154eb +size 23877 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png index 872a2f2274..4b92e9e6d3 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:615e00dfa47d40fd459d268d6e68c61a501be7e4a24bfe7d18f3a647da8c5f08 -size 10595 +oid sha256:925a868134fc7d40eaa88c81d929d6b8bc0c6a7aae9cd0269339c2e5f5edfb66 +size 24167 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png index 94f6c889ab..e9d9eae69f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4693928382d102599e18c2254c58451c854c304b19706ecb02b832c92ddf15ef -size 47041 +oid sha256:b51c1aa294a9881a549cbac7b7b1f4f6465bc2d96fbfaddbfc47feeb8d7a13c9 +size 47040 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png index 845fd9fc0a..a4df96c9e9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:421e47de6c2bc7fd0a5de84b6db4bea79c7312442244ec11506164150762943b -size 9787 +oid sha256:47b0809b3e4534125d5e2d0fb8bb4db6435e488eef312be0ecbd6d36ef1212b5 +size 24451 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png index b1929f4a50..8e26265dfb 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:deeab9451d51a2b3403f1d5711d0cf64b762847a674ae78f4232ce02fed575f7 -size 46014 +oid sha256:5aaf23300ca5d75620b4f3498d2a0a8f8568292c14bf81b89dcca9ce1ecb5fad +size 46039 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png index 3b19a76226..43486bc1f5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34afdcdb8cd199ff67ff628aef28757381c5f5f4bed57131f5eac2ae7423894f -size 80573 +oid sha256:1a219527b5d2fc5e581f9e4e5026284a823f0e67b1ec33e12af526b3628d52e6 +size 80571 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png index 3b19a76226..43486bc1f5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34afdcdb8cd199ff67ff628aef28757381c5f5f4bed57131f5eac2ae7423894f -size 80573 +oid sha256:1a219527b5d2fc5e581f9e4e5026284a823f0e67b1ec33e12af526b3628d52e6 +size 80571 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png index b29f4c6e61..b1378d9cef 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5509141f2b39c0f4330ef256687b31f0d421040f58719a62aad34f6a224e1cf4 -size 90443 +oid sha256:fc44364cd6f9862a9ee949897ca6a6368f4c7fff8f5bf9ec954e4719c6dc2730 +size 90423 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png index 2632ca4b08..f020b503a8 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a3ea7afa73bfd0ace6999afa7cefd0f99069808b0cb10601e7c674b7f45ea0e +oid sha256:873e6d0627246b4e74407020419e5c10dbc1b774c517556d293ef37235002fde size 80631 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png index 72c76f3eaf..bd0b9fd869 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bd9d6331dfe578c1755f3f3c5cf52bafb6b7d0bd811c122daa79adf5066e72a +oid sha256:bb0cf03d1806a0312e10bc4d758102dd0b872d88106464f2112de2dc505e7e7b size 102780 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png index 47770ec085..29e84da0f7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cb1163e0853dfb5df0f922095a36a4d183decc24a9e4736861186dda30b77cc -size 82859 +oid sha256:beeee93d72ab3bdd601dd03eec5beb271181a200c11c042b985b9495ded0c320 +size 82878 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png index 47770ec085..29e84da0f7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cb1163e0853dfb5df0f922095a36a4d183decc24a9e4736861186dda30b77cc -size 82859 +oid sha256:beeee93d72ab3bdd601dd03eec5beb271181a200c11c042b985b9495ded0c320 +size 82878 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png index b73d290584..a45c42c14d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b3263df594697683a84f15268faeb69709bd3bf0cbb4770a4ce883cad599a2e -size 91815 +oid sha256:9a90f232c00dc9b7c1e74b16461e6b91b18f5729f771c3a60f4aa68c29513e97 +size 91791 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png index e99f9fab72..ac0113ead9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89d0f544f879c7d2fad983cac29f3f58e7aac2d6e0530151b4f51ecef3628aaa -size 82318 +oid sha256:df8723b2a7cbc1720128a0e8dfdbb10cb82394881ad216ed328b15395302e463 +size 82322 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png index f4de24344f..8e0a5f6a2c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fce8f9d8f11b55c390fd8136f7f005ca7bc199e36c5231b9ac3b6118e2e7b5c -size 104166 +oid sha256:c6d4e0c7fc8607c6d05997e0c1201311cbe05a69851b9828156969f2ce300246 +size 104171 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png index d9166cd47d..0c3172d51c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:754e5614822424e86e73a631f5303074e85dfb6bf4e6abc7f7e698e2cbc8d6ba -size 12850 +oid sha256:0c8f59a7ab4ca881281b2859ff9fe0ac07cedb0d0c11212365cc26138edc1193 +size 12891 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png index 36604c6005..0eb11fb90a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d06d65a5768007020eab6b48844ea1216fcdb9b19f17f15171234f8a5dd9c517 -size 12394 +oid sha256:62aab15deb6d98f70457e9682df2150a6fa73cd34ae8103a2e618c4d87aa4adc +size 12398 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4886244a8e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:710b2e1fbcc1db1979bc72b901b00e56154d3ca0c53e134b1a4afcf1833864de +size 125133 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..82c102847d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e8ed7120cbefb63c8d1f4b51a08d1365986afee63f69c299225d73d88f6572c +size 108090 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d6c9305c53 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfce7f7e1eeffdf79d3e60c1c3cd3409199aecdb7d03fb3eea48ffa594984f77 +size 11753 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..52aae9ac10 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96b1330584b85f97a67658eedda681cd27d11e5a662178c2139136e485182ec3 +size 11752 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-3_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-3_4_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-3_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-3_5_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-5_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-5_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-5_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-5_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-7_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-7_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-7_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-7_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-6_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-6_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-6_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-6_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-8_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-8_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-8_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-8_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-9_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-9_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-9_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-9_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en].png From dd945acab78b8ee82006e28d0bbd6eda42f29f69 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 18:56:16 +0200 Subject: [PATCH 093/289] Remove extra new line. --- .../element/android/features/joinroom/impl/JoinRoomViewTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt index c8415e4b26..8f3bd5bdd5 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -126,4 +126,3 @@ private fun AndroidComposeTestRule.setJoinR ) } } - From f1668b8abe764e7cada916a6577253a505ebc0d5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 20:13:10 +0200 Subject: [PATCH 094/289] Update doc. --- .../libraries/designsystem/atomic/pages/HeaderFooterPage.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt index f36d17a08d..4dd00a67d9 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt @@ -38,6 +38,7 @@ import io.element.android.libraries.designsystem.theme.components.Text /** * @param modifier Classical modifier. * @param paddingValues padding values to apply to the content. + * @param containerColor color of the container. Set to [Color.Transparent] if you provide a background in the [modifier]. * @param background optional background component. * @param topBar optional topBar. * @param header optional header. From cf49677ffafb1a5557db191b19f3a9324b624e38 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 10:02:39 +0200 Subject: [PATCH 095/289] Remove empty line and ensure check.sh script run ktlint. --- .../features/roomlist/impl/search/RoomListSearchViewTest.kt | 1 - tools/quality/check.sh | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt index 0c437f8553..b3f0755f11 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt @@ -69,4 +69,3 @@ private fun AndroidComposeTestRule.setRoomL ) } } - diff --git a/tools/quality/check.sh b/tools/quality/check.sh index c3f87b3018..be323f6884 100755 --- a/tools/quality/check.sh +++ b/tools/quality/check.sh @@ -25,6 +25,9 @@ set -e # First run the quickest script ./tools/check/check_code_quality.sh +# Check ktlint first +./gradlew ktlintCheck + # Build, test and check the project, with warning as errors # It also check that the minimal app is compiling. ./gradlew check -PallWarningsAsErrors=true From 87f89244a60ff5b6effaeb86a489a3afe50bdaaa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 10:33:19 +0200 Subject: [PATCH 096/289] Avoid getting roomInfo again. Also add a test to cover the case of non-null inviter. --- .../joinroom/impl/JoinRoomPresenter.kt | 23 ++++++---------- .../joinroom/impl/JoinRoomPresenterTest.kt | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 8e85b846cc..3edfb97d93 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -40,7 +40,6 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.ui.model.InviteSender import io.element.android.libraries.matrix.ui.model.toInviteSender -import kotlinx.coroutines.flow.first import java.util.Optional import kotlin.jvm.optionals.getOrNull @@ -78,22 +77,16 @@ class JoinRoomPresenter @AssistedInject constructor( else -> { value = ContentState.Loading(roomIdOrAlias) val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) - result.fold( - onSuccess = { - value = it.toContentState(null) - if (it.isInvited) { - // Get the inviteSender - matrixClient.getRoomInfoFlow(roomId).first() - .getOrNull() - ?.inviter - ?.toInviteSender() - ?.let { inviteSender -> - value = it.toContentState(inviteSender) - } - } + value = result.fold( + onSuccess = { roomPreview -> + val inviteSender = roomInfo.getOrNull() + ?.takeIf { roomPreview.isInvited } + ?.inviter + ?.toInviteSender() + roomPreview.toContentState(inviteSender) }, onFailure = { throwable -> - value = if (throwable.message?.contains("403") == true) { + if (throwable.message?.contains("403") == true) { ContentState.UnknownRoom(roomIdOrAlias) } else { ContentState.Failure(roomIdOrAlias, throwable) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index e2fa92a8a3..939f60a4c8 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -25,6 +25,7 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient 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.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.preview.RoomPreview @@ -33,6 +34,8 @@ import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.room.aRoomInfo +import io.element.android.libraries.matrix.test.room.aRoomMember +import io.element.android.libraries.matrix.ui.model.toInviteSender import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.lambdaRecorder @@ -106,6 +109,30 @@ class JoinRoomPresenterTest { } } + @Test + fun `present - when room is invited then join authorization is equal to invited, and inviter is provided`() = runTest { + val inviter = aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob") + val expectedInviteSender = inviter.toInviteSender() + val roomInfo = aRoomInfo( + currentUserMembership = CurrentUserMembership.INVITED, + inviter = inviter, + ) + val matrixClient = FakeMatrixClient().apply { + getRoomInfoFlowLambda = { _ -> + flowOf(Optional.of(roomInfo)) + } + } + val presenter = createJoinRoomPresenter( + matrixClient = matrixClient + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.IsInvited(expectedInviteSender)) + } + } + } + @Test fun `present - when room is invited then accept and decline events are sent to acceptDeclinePresenter`() = runTest { val eventSinkRecorder = lambdaRecorder { _: AcceptDeclineInviteEvents -> } From 1fd71801a69e39504249968f8cc825ac30da9458 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 11:26:35 +0200 Subject: [PATCH 097/289] Remove useless case. If user is invited, roomInfo will be present. --- .../features/joinroom/impl/JoinRoomPresenter.kt | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 3edfb97d93..fbf4aeab31 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -38,10 +38,8 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview -import io.element.android.libraries.matrix.ui.model.InviteSender import io.element.android.libraries.matrix.ui.model.toInviteSender import java.util.Optional -import kotlin.jvm.optionals.getOrNull class JoinRoomPresenter @AssistedInject constructor( @Assisted private val roomId: RoomId, @@ -79,11 +77,7 @@ class JoinRoomPresenter @AssistedInject constructor( val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) value = result.fold( onSuccess = { roomPreview -> - val inviteSender = roomInfo.getOrNull() - ?.takeIf { roomPreview.isInvited } - ?.inviter - ?.toInviteSender() - roomPreview.toContentState(inviteSender) + roomPreview.toContentState() }, onFailure = { throwable -> if (throwable.message?.contains("403") == true) { @@ -127,9 +121,7 @@ class JoinRoomPresenter @AssistedInject constructor( } } -private fun RoomPreview.toContentState( - inviteSender: InviteSender? -): ContentState { +private fun RoomPreview.toContentState(): ContentState { return ContentState.Loaded( roomId = roomId, name = name, @@ -139,7 +131,8 @@ private fun RoomPreview.toContentState( isDirect = false, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when { - isInvited -> JoinAuthorisationStatus.IsInvited(inviteSender) + // Note when isInvited, roomInfo will be used, so if this happen, it will be temporary. + isInvited -> JoinAuthorisationStatus.IsInvited(null) canKnock -> JoinAuthorisationStatus.CanKnock isPublic -> JoinAuthorisationStatus.CanJoin else -> JoinAuthorisationStatus.Unknown From 6863a906ee4be00a732ba922ba72bee9de522d81 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 11:27:34 +0200 Subject: [PATCH 098/289] fix typo --- .../android/features/joinroom/impl/JoinRoomPresenterTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 939f60a4c8..fb36532e2d 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -110,7 +110,7 @@ class JoinRoomPresenterTest { } @Test - fun `present - when room is invited then join authorization is equal to invited, and inviter is provided`() = runTest { + fun `present - when room is invited then join authorization is equal to invited, an inviter is provided`() = runTest { val inviter = aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob") val expectedInviteSender = inviter.toInviteSender() val roomInfo = aRoomInfo( From 94930bae80b1cb34e8c1dc4eb4653cb30ced9e54 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 11:40:16 +0200 Subject: [PATCH 099/289] Add Konsist check to ensure that 'org.jetbrains.annotations.VisibleForTesting' is not used. --- .../tests/konsist/KonsistImportTest.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt new file mode 100644 index 0000000000..5f82a1251e --- /dev/null +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.tests.konsist + +import com.lemonappdev.konsist.api.Konsist +import com.lemonappdev.konsist.api.verify.assertFalse +import org.junit.Test + +class KonsistImportTest { + @Test + fun `Functions with '@VisibleForTesting' annotation should use 'androidx' version`() { + Konsist + .scopeFromProject() + .imports + .assertFalse( + additionalMessage = "Please use 'androidx.annotation.VisibleForTesting' instead of 'org.jetbrains.annotations.VisibleForTesting' (project convention).", + ) { + it.name == "org.jetbrains.annotations.VisibleForTesting" + } + } +} From 74a9a54719a6a3665ac1aa213d0cc37641993be2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 12:52:33 +0200 Subject: [PATCH 100/289] Rename Preview to follow code convention --- .../io/element/android/appnav/root/RootView.kt | 2 +- .../lockscreen/impl/unlock/PinUnlockView.kt | 4 ++-- .../impl/mentions/MentionSuggestionsPickerView.kt | 2 +- .../timeline/components/MessagesReactionButton.kt | 4 ++-- .../receipt/TimelineItemReadReceiptView.kt | 2 +- .../features/onboarding/impl/OnBoardingView.kt | 2 +- .../poll/api/pollcontent/PollAnswerView.kt | 14 +++++++------- .../poll/api/pollcontent/PollContentView.kt | 12 ++++++------ .../impl/invite/RoomInviteMembersView.kt | 2 +- .../roomdetails/impl/members/RoomMemberListView.kt | 4 ++-- .../RoomNotificationSettingsOption.kt | 2 +- .../RoomNotificationSettingsView.kt | 2 +- .../UserDefinedRoomNotificationSettingsView.kt | 2 +- .../rolesandpermissions/RolesAndPermissionsView.kt | 2 +- .../roomlist/impl/migration/MigrationScreenView.kt | 2 +- .../roomlist/impl/search/RoomListSearchView.kt | 2 +- .../libraries/designsystem/components/PageTitle.kt | 4 ++-- .../components/async/AsyncIndicatorView.kt | 4 ++-- .../components/avatar/UserAvatarPreview.kt | 2 +- .../button/GradientFloatingActionButton.kt | 2 +- .../components/preferences/PreferencePage.kt | 2 +- .../libraries/designsystem/ruler/WithRulers.kt | 2 +- .../matrix/ui/components/SelectedUsersRowList.kt | 2 +- .../textcomposer/components/FormattingOption.kt | 2 +- 24 files changed, 40 insertions(+), 40 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt index 26772e56fa..1833aee1c3 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt @@ -68,7 +68,7 @@ fun RootView( @PreviewsDayNight @Composable -internal fun RootPreview(@PreviewParameter(RootStateProvider::class) rootState: RootState) = ElementPreview { +internal fun RootViewPreview(@PreviewParameter(RootStateProvider::class) rootState: RootState) = ElementPreview { RootView( state = rootState, onOpenBugReport = {}, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockView.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockView.kt index db12006e04..467de77d2b 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockView.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockView.kt @@ -358,7 +358,7 @@ private fun PinUnlockFooter( @Composable @PreviewsDayNight -internal fun PinUnlockInAppViewPreview(@PreviewParameter(PinUnlockStateProvider::class) state: PinUnlockState) { +internal fun PinUnlockViewInAppPreview(@PreviewParameter(PinUnlockStateProvider::class) state: PinUnlockState) { ElementPreview { PinUnlockView( state = state, @@ -369,7 +369,7 @@ internal fun PinUnlockInAppViewPreview(@PreviewParameter(PinUnlockStateProvider: @Composable @PreviewsDayNight -internal fun PinUnlockDefaultViewPreview(@PreviewParameter(PinUnlockStateProvider::class) state: PinUnlockState) { +internal fun PinUnlockViewPreview(@PreviewParameter(PinUnlockStateProvider::class) state: PinUnlockState) { ElementPreview { PinUnlockView( state = state, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/mentions/MentionSuggestionsPickerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/mentions/MentionSuggestionsPickerView.kt index fd46405fe6..cf48ea1478 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/mentions/MentionSuggestionsPickerView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/mentions/MentionSuggestionsPickerView.kt @@ -141,7 +141,7 @@ private fun RoomMemberSuggestionItemView( @PreviewsDayNight @Composable -internal fun MentionSuggestionsPickerView_Preview() { +internal fun MentionSuggestionsPickerViewPreview() { ElementPreview { val roomMember = RoomMember( userId = UserId("@alice:server.org"), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt index b5e15d0d6c..7786a69db6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt @@ -191,7 +191,7 @@ internal fun MessagesReactionButtonPreview(@PreviewParameter(AggregatedReactionP @PreviewsDayNight @Composable -internal fun MessagesAddReactionButtonPreview() = ElementPreview { +internal fun MessagesReactionButtonAddPreview() = ElementPreview { MessagesReactionButton( content = MessagesReactionsButtonContent.Icon(CompoundDrawables.ic_compound_reaction_add), onClick = {}, @@ -201,7 +201,7 @@ internal fun MessagesAddReactionButtonPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun MessagesReactionExtraButtonsPreview() = ElementPreview { +internal fun MessagesReactionButtonExtraPreview() = ElementPreview { Row { MessagesReactionButton( content = MessagesReactionsButtonContent.Text("12 more"), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt index 047e04e187..540bff9a2b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt @@ -207,7 +207,7 @@ private fun computeReceiptDescription(receipts: ImmutableList): @PreviewsDayNight @Composable -internal fun TimelineItemReactionsViewPreview( +internal fun TimelineItemReadReceiptViewPreview( @PreviewParameter(ReadReceiptViewStateProvider::class) state: ReadReceiptViewState, ) = ElementPreview { TimelineItemReadReceiptView( diff --git a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt b/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt index d87fb36c03..09553d6c42 100644 --- a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt +++ b/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt @@ -202,7 +202,7 @@ private fun OnBoardingButtons( @PreviewsDayNight @Composable -internal fun OnBoardingScreenPreview( +internal fun OnBoardingViewPreview( @PreviewParameter(OnBoardingStateProvider::class) state: OnBoardingState ) = ElementPreview { OnBoardingView( diff --git a/features/poll/api/src/main/kotlin/io/element/android/features/poll/api/pollcontent/PollAnswerView.kt b/features/poll/api/src/main/kotlin/io/element/android/features/poll/api/pollcontent/PollAnswerView.kt index 70658e65a8..946f81f71a 100644 --- a/features/poll/api/src/main/kotlin/io/element/android/features/poll/api/pollcontent/PollAnswerView.kt +++ b/features/poll/api/src/main/kotlin/io/element/android/features/poll/api/pollcontent/PollAnswerView.kt @@ -132,7 +132,7 @@ internal fun PollAnswerView( @PreviewsDayNight @Composable -internal fun PollAnswerDisclosedNotSelectedPreview() = ElementPreview { +internal fun PollAnswerViewDisclosedNotSelectedPreview() = ElementPreview { PollAnswerView( answerItem = aPollAnswerItem(showVotes = true, isSelected = false), ) @@ -140,7 +140,7 @@ internal fun PollAnswerDisclosedNotSelectedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollAnswerDisclosedSelectedPreview() = ElementPreview { +internal fun PollAnswerViewDisclosedSelectedPreview() = ElementPreview { PollAnswerView( answerItem = aPollAnswerItem(showVotes = true, isSelected = true), ) @@ -148,7 +148,7 @@ internal fun PollAnswerDisclosedSelectedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollAnswerUndisclosedNotSelectedPreview() = ElementPreview { +internal fun PollAnswerViewUndisclosedNotSelectedPreview() = ElementPreview { PollAnswerView( answerItem = aPollAnswerItem(showVotes = false, isSelected = false), ) @@ -156,7 +156,7 @@ internal fun PollAnswerUndisclosedNotSelectedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollAnswerUndisclosedSelectedPreview() = ElementPreview { +internal fun PollAnswerViewUndisclosedSelectedPreview() = ElementPreview { PollAnswerView( answerItem = aPollAnswerItem(showVotes = false, isSelected = true), ) @@ -164,7 +164,7 @@ internal fun PollAnswerUndisclosedSelectedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollAnswerEndedWinnerNotSelectedPreview() = ElementPreview { +internal fun PollAnswerViewEndedWinnerNotSelectedPreview() = ElementPreview { PollAnswerView( answerItem = aPollAnswerItem(showVotes = true, isSelected = false, isEnabled = false, isWinner = true), ) @@ -172,7 +172,7 @@ internal fun PollAnswerEndedWinnerNotSelectedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollAnswerEndedWinnerSelectedPreview() = ElementPreview { +internal fun PollAnswerViewEndedWinnerSelectedPreview() = ElementPreview { PollAnswerView( answerItem = aPollAnswerItem(showVotes = true, isSelected = true, isEnabled = false, isWinner = true), ) @@ -180,7 +180,7 @@ internal fun PollAnswerEndedWinnerSelectedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollAnswerEndedSelectedPreview() = ElementPreview { +internal fun PollAnswerViewEndedSelectedPreview() = ElementPreview { PollAnswerView( answerItem = aPollAnswerItem(showVotes = true, isSelected = true, isEnabled = false, isWinner = false), ) diff --git a/features/poll/api/src/main/kotlin/io/element/android/features/poll/api/pollcontent/PollContentView.kt b/features/poll/api/src/main/kotlin/io/element/android/features/poll/api/pollcontent/PollContentView.kt index a77753fc4c..b8f77ce3af 100644 --- a/features/poll/api/src/main/kotlin/io/element/android/features/poll/api/pollcontent/PollContentView.kt +++ b/features/poll/api/src/main/kotlin/io/element/android/features/poll/api/pollcontent/PollContentView.kt @@ -241,7 +241,7 @@ private fun CreatorView( @PreviewsDayNight @Composable -internal fun PollContentUndisclosedPreview() = ElementPreview { +internal fun PollContentViewUndisclosedPreview() = ElementPreview { PollContentView( eventId = EventId("\$anEventId"), question = "What type of food should we have at the party?", @@ -258,7 +258,7 @@ internal fun PollContentUndisclosedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollContentDisclosedPreview() = ElementPreview { +internal fun PollContentViewDisclosedPreview() = ElementPreview { PollContentView( eventId = EventId("\$anEventId"), question = "What type of food should we have at the party?", @@ -275,7 +275,7 @@ internal fun PollContentDisclosedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollContentEndedPreview() = ElementPreview { +internal fun PollContentViewEndedPreview() = ElementPreview { PollContentView( eventId = EventId("\$anEventId"), question = "What type of food should we have at the party?", @@ -292,7 +292,7 @@ internal fun PollContentEndedPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollContentCreatorEditablePreview() = ElementPreview { +internal fun PollContentViewCreatorEditablePreview() = ElementPreview { PollContentView( eventId = EventId("\$anEventId"), question = "What type of food should we have at the party?", @@ -309,7 +309,7 @@ internal fun PollContentCreatorEditablePreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollContentCreatorPreview() = ElementPreview { +internal fun PollContentViewCreatorPreview() = ElementPreview { PollContentView( eventId = EventId("\$anEventId"), question = "What type of food should we have at the party?", @@ -326,7 +326,7 @@ internal fun PollContentCreatorPreview() = ElementPreview { @PreviewsDayNight @Composable -internal fun PollContentCreatorEndedPreview() = ElementPreview { +internal fun PollContentViewCreatorEndedPreview() = ElementPreview { PollContentView( eventId = EventId("\$anEventId"), question = "What type of food should we have at the party?", diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt index 39c2118580..f6e8f07cce 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt @@ -225,7 +225,7 @@ private fun RoomInviteMembersSearchBar( @PreviewsDayNight @Composable -internal fun RoomInviteMembersPreview(@PreviewParameter(RoomInviteMembersStateProvider::class) state: RoomInviteMembersState) = ElementPreview { +internal fun RoomInviteMembersViewPreview(@PreviewParameter(RoomInviteMembersStateProvider::class) state: RoomInviteMembersState) = ElementPreview { RoomInviteMembersView( state = state, onBackPressed = {}, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt index 029d541039..c111245ee0 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt @@ -357,7 +357,7 @@ private fun RoomMemberSearchBar( @PreviewsDayNight @Composable -internal fun RoomMemberListPreview(@PreviewParameter(RoomMemberListStateProvider::class) state: RoomMemberListState) = ElementPreview { +internal fun RoomMemberListViewPreview(@PreviewParameter(RoomMemberListStateProvider::class) state: RoomMemberListState) = ElementPreview { RoomMemberListView( state = state, navigator = object : RoomMemberListNavigator {}, @@ -366,7 +366,7 @@ internal fun RoomMemberListPreview(@PreviewParameter(RoomMemberListStateProvider @PreviewsDayNight @Composable -internal fun RoomMemberBannedListPreview(@PreviewParameter(RoomMemberListStateBannedProvider::class) state: RoomMemberListState) = ElementPreview { +internal fun RoomMemberListViewBannedPreview(@PreviewParameter(RoomMemberListStateBannedProvider::class) state: RoomMemberListState) = ElementPreview { RoomMemberListView( initialSelectedSectionIndex = 1, state = state, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOption.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOption.kt index eaea25d202..15e450502a 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOption.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOption.kt @@ -57,7 +57,7 @@ fun RoomNotificationSettingsOption( @PreviewsDayNight @Composable -internal fun RoomPrivacyOptionPreview() = ElementPreview { +internal fun RoomNotificationSettingsOptionPreview() = ElementPreview { Column { for ((index, item) in roomNotificationSettingsItems().withIndex()) { RoomNotificationSettingsOption( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt index b34ee3a620..ec3d436752 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt @@ -190,7 +190,7 @@ private fun RoomNotificationSettingsTopBar( @PreviewsDayNight @Composable -internal fun RoomNotificationSettingsPreview( +internal fun RoomNotificationSettingsViewPreview( @PreviewParameter(RoomNotificationSettingsStateProvider::class) state: RoomNotificationSettingsState ) = ElementPreview { RoomNotificationSettingsView( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt index 99903b7466..925ea23401 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt @@ -116,7 +116,7 @@ private fun UserDefinedRoomNotificationSettingsTopBar( @PreviewsDayNight @Composable -internal fun UserDefinedRoomNotificationSettingsPreview( +internal fun UserDefinedRoomNotificationSettingsViewPreview( @PreviewParameter(UserDefinedRoomNotificationSettingsStateProvider::class) state: RoomNotificationSettingsState ) = ElementPreview { UserDefinedRoomNotificationSettingsView( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsView.kt index f97b069215..268e7ca478 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsView.kt @@ -203,7 +203,7 @@ private fun ChangeOwnRoleBottomSheet( @PreviewsDayNight @Composable -internal fun RolesAndPermissionViewPreview(@PreviewParameter(RolesAndPermissionsStateProvider::class) state: RolesAndPermissionsState) { +internal fun RolesAndPermissionsViewPreview(@PreviewParameter(RolesAndPermissionsStateProvider::class) state: RolesAndPermissionsState) { ElementPreview { RolesAndPermissionsView( state = state, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/migration/MigrationScreenView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/migration/MigrationScreenView.kt index 67e1999fc9..ec012e82ba 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/migration/MigrationScreenView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/migration/MigrationScreenView.kt @@ -50,6 +50,6 @@ fun MigrationScreenView( @Composable @PreviewsDayNight -internal fun MigrationViewPreview() = ElementPreview { +internal fun MigrationScreenViewPreview() = ElementPreview { MigrationScreenView(isMigrating = true) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt index 331ae66587..a18dd6607f 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt @@ -234,7 +234,7 @@ private fun RoomDirectorySearchButton( @PreviewsDayNight @Composable -internal fun RoomListSearchResultContentPreview(@PreviewParameter(RoomListSearchStateProvider::class) state: RoomListSearchState) = ElementPreview { +internal fun RoomListSearchContentPreview(@PreviewParameter(RoomListSearchStateProvider::class) state: RoomListSearchState) = ElementPreview { RoomListSearchContent( state = state, onRoomClicked = {}, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/PageTitle.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/PageTitle.kt index de1e25f5f3..833d822260 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/PageTitle.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/PageTitle.kt @@ -108,7 +108,7 @@ fun PageTitle( @PreviewsDayNight @Composable -internal fun TitleWithIconFullPreview(@PreviewParameter(BigIconStylePreviewProvider::class) style: BigIcon.Style) { +internal fun PageTitleWithIconFullPreview(@PreviewParameter(BigIconStylePreviewProvider::class) style: BigIcon.Style) { ElementPreview { PageTitle( modifier = Modifier.padding(top = 24.dp), @@ -124,7 +124,7 @@ internal fun TitleWithIconFullPreview(@PreviewParameter(BigIconStylePreviewProvi @PreviewsDayNight @Composable -internal fun TitleWithIconMinimalPreview() { +internal fun PageTitleWithIconMinimalPreview() { ElementPreview { PageTitle( modifier = Modifier.padding(top = 24.dp), diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/async/AsyncIndicatorView.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/async/AsyncIndicatorView.kt index 897d9ffc9a..c9223b2360 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/async/AsyncIndicatorView.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/async/AsyncIndicatorView.kt @@ -75,7 +75,7 @@ internal fun AsyncIndicatorView( @PreviewsDayNight @Composable -internal fun AsyncIndicatorView_Loading_Preview() { +internal fun AsyncIndicatorLoadingPreview() { ElementPreview { AsyncIndicator.Loading(text = "Loading") } @@ -83,7 +83,7 @@ internal fun AsyncIndicatorView_Loading_Preview() { @PreviewsDayNight @Composable -internal fun AsyncIndicatorView_Failed_Preview() { +internal fun AsyncIndicatorFailurePreview() { ElementPreview { AsyncIndicator.Failure(text = "Failed") } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/UserAvatarPreview.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/UserAvatarPreview.kt index 0fa4ca35f8..5a71e30d80 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/UserAvatarPreview.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/UserAvatarPreview.kt @@ -31,7 +31,7 @@ import io.element.android.libraries.designsystem.theme.components.Text @PreviewsDayNight @Composable -internal fun UserAvatarPreview() = ElementPreview { +internal fun UserAvatarColorsPreview() = ElementPreview { Column( modifier = Modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp), diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/GradientFloatingActionButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/GradientFloatingActionButton.kt index dcce83644c..fc37cee47a 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/GradientFloatingActionButton.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/GradientFloatingActionButton.kt @@ -128,7 +128,7 @@ internal fun GradientFloatingActionButtonPreview() { @PreviewsDayNight @Composable -internal fun GradientSendButtonPreview() { +internal fun GradientFloatingActionButtonCircleShapePreview() { ElementPreview { Box(modifier = Modifier.padding(20.dp)) { GradientFloatingActionButton( diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt index 1aa245c945..b02cf157d8 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt @@ -98,7 +98,7 @@ private fun PreferenceTopAppBar( @PreviewsDayNight @Composable -internal fun PreferenceViewPreview() = ElementPreview { +internal fun PreferencePagePreview() = ElementPreview { PreferencePage( title = "Preference screen", onBackPressed = {}, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ruler/WithRulers.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ruler/WithRulers.kt index c24b34271f..66e1333d01 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ruler/WithRulers.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ruler/WithRulers.kt @@ -64,7 +64,7 @@ fun WithRulers( @PreviewsDayNight @Composable -internal fun WithRulerPreview() = ElementPreview { +internal fun WithRulersPreview() = ElementPreview { WithRulers(xRulersOffset = 20.dp, yRulersOffset = 15.dp) { OutlinedButton( text = "A Button with rulers on it!", diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersRowList.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersRowList.kt index 9c075f5051..065f23a661 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersRowList.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersRowList.kt @@ -132,7 +132,7 @@ fun SelectedUsersRowList( @PreviewsDayNight @Composable -internal fun SelectedUsersListPreview() = ElementPreview { +internal fun SelectedUsersRowListPreview() = ElementPreview { Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { // Two users that will be visible with no scrolling SelectedUsersRowList( diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt index 5f283b0ec1..84bbce889e 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt @@ -89,7 +89,7 @@ internal fun FormattingOption( @PreviewsDayNight @Composable -internal fun FormattingButtonPreview() = ElementPreview { +internal fun FormattingOptionPreview() = ElementPreview { Row { FormattingOption( state = FormattingOptionState.Default, From ff254554c6e7f28edbb0e2fc8d1dc102256ee49d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 12:56:19 +0200 Subject: [PATCH 101/289] Add Konsist test to check preview function names. --- .../tests/konsist/KonsistPreviewTest.kt | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index 04f5e2c0b3..be7780b4e7 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -19,6 +19,7 @@ package io.element.android.tests.konsist import androidx.compose.ui.tooling.preview.PreviewLightDark import com.lemonappdev.konsist.api.Konsist import com.lemonappdev.konsist.api.ext.list.withAllAnnotationsOf +import com.lemonappdev.konsist.api.ext.list.withoutName import com.lemonappdev.konsist.api.verify.assertEmpty import com.lemonappdev.konsist.api.verify.assertTrue import io.element.android.libraries.designsystem.preview.PreviewsDayNight @@ -60,6 +61,82 @@ class KonsistPreviewTest { } } + @Test + fun `Functions with '@PreviewsDayNight' have correct name`() { + Konsist + .scopeFromProject() + .functions() + .withAllAnnotationsOf(PreviewsDayNight::class) + .withoutName( + "AsyncIndicatorFailurePreview", + "AsyncIndicatorLoadingPreview", + "BloomInitialsPreview", + "BloomPreview", + "ColorAliasesPreview", + "DefaultRoomListTopBarWithIndicatorPreview", + "GradientFloatingActionButtonCircleShapePreview", + "IconTitleSubtitleMoleculeWithResIconPreview", + "IconsCompoundPreview", + "IconsOtherPreview", + "MentionSpanPreview", + "MessageComposerViewVoicePreview", + "MessagesReactionButtonAddPreview", + "MessagesReactionButtonExtraPreview", + "MessagesViewWithTypingPreview", + "PageTitleWithIconFullPreview", + "PageTitleWithIconMinimalPreview", + "PendingMemberRowWithLongNamePreview", + "PinUnlockViewInAppPreview", + "PollAnswerViewDisclosedNotSelectedPreview", + "PollAnswerViewDisclosedSelectedPreview", + "PollAnswerViewEndedSelectedPreview", + "PollAnswerViewEndedWinnerNotSelectedPreview", + "PollAnswerViewEndedWinnerSelectedPreview", + "PollAnswerViewUndisclosedNotSelectedPreview", + "PollAnswerViewUndisclosedSelectedPreview", + "PollContentViewCreatorEditablePreview", + "PollContentViewCreatorEndedPreview", + "PollContentViewCreatorPreview", + "PollContentViewDisclosedPreview", + "PollContentViewEndedPreview", + "PollContentViewUndisclosedPreview", + "ReadReceiptBottomSheetPreview", + "RoomListModalBottomSheetContentForDmPreview", + "RoomMemberListViewBannedPreview", + "SasEmojisPreview", + "SecureBackupSetupViewChangePreview", + "SelectedUserCannotRemovePreview", + "TextComposerEditPreview", + "TextComposerFormattingPreview", + "TextComposerLinkDialogCreateLinkPreview", + "TextComposerLinkDialogCreateLinkWithoutTextPreview", + "TextComposerLinkDialogEditLinkPreview", + "TextComposerReplyPreview", + "TextComposerSimplePreview", + "TextComposerVoicePreview", + "TimelineImageWithCaptionRowPreview", + "TimelineItemEventRowForDirectRoomPreview", + "TimelineItemEventRowTimestampPreview", + "TimelineItemEventRowWithManyReactionsPreview", + "TimelineItemEventRowWithRRPreview", + "TimelineItemEventRowWithReplyPreview", + "TimelineItemGroupedEventsRowContentCollapsePreview", + "TimelineItemGroupedEventsRowContentExpandedPreview", + "TimelineItemVoiceViewUnifiedPreview", + "TimelineVideoWithCaptionRowPreview", + "UserAvatarColorsPreview", + ) + .assertTrue( + additionalMessage = "Functions for Preview should be named like this: Preview. " + + "Exception can be added to the test, for multiple Previews of the same view", + ) { + val testedView = it.name.removeSuffix("Preview") + it.text.contains("$testedView(") || + it.text.contains("$testedView {") || + it.text.contains("ContentToPreview(") + } + } + @Test fun `Ensure that '@PreviewLightDark' is not used`() { Konsist From 1490e40596f8fe924ec64cb867e70d55b4da61e2 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Fri, 19 Apr 2024 12:42:40 +0000 Subject: [PATCH 102/289] Update screenshots --- ...oot_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en].png} | 0 ...oot_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en].png} | 0 ...oot_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en].png} | 0 ...t_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en].png} | 0 ...t_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en].png} | 0 ...t_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en].png} | 0 ...pp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en].png} | 0 ...pp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en].png} | 0 ...pp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en].png} | 0 ...pp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en].png} | 0 ...pp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en].png} | 0 ...pp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en].png} | 0 ...pp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en].png} | 0 ..._null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en].png} | 0 ..._null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en].png} | 0 ..._null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en].png} | 0 ..._null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en].png} | 0 ..._null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en].png} | 0 ..._null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en].png} | 0 ..._null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en].png} | 0 ...ockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en].png} | 0 ...ockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en].png} | 0 ...ockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en].png} | 0 ...ockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en].png} | 0 ...ockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en].png} | 0 ...ockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en].png} | 0 ...ockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en].png} | 0 ...kView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en].png} | 0 ...kView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en].png} | 0 ...kView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en].png} | 0 ...kView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en].png} | 0 ...kView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en].png} | 0 ...kView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en].png} | 0 ...kView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en].png} | 0 ...MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en].png} | 0 ...ntionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en].png} | 0 ...elineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en].png} | 0 ...elineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en].png} | 0 ...elineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en].png} | 0 ...elineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en].png} | 0 ...elineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en].png} | 0 ...elineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en].png} | 0 ...elineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en].png} | 0 ...elineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en].png} | 0 ...ineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en].png} | 0 ...ineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en].png} | 0 ...ineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en].png} | 0 ...ineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en].png} | 0 ...ineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en].png} | 0 ...ineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en].png} | 0 ...ineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en].png} | 0 ...ineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en].png} | 0 ..._MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en].png} | 0 ...essagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en].png} | 0 ...essagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en].png} | 0 ...sagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en].png} | 0 ...ngView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en].png} | 0 ...ngView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en].png} | 0 ...ngView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en].png} | 0 ...ngView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en].png} | 0 ...ngView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en].png} | 0 ...View_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en].png} | 0 ...View_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en].png} | 0 ...View_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en].png} | 0 ...View_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en].png} | 0 ...View_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en].png} | 0 ...swerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en].png} | 0 ...erViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en].png} | 0 ...lAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en].png} | 0 ...nswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en].png} | 0 ..._PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en].png} | 0 ...ollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en].png} | 0 ...erViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en].png} | 0 ...ViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en].png} | 0 ...nswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en].png} | 0 ...werViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en].png} | 0 ...erViewUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en].png} | 0 ...ViewUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en].png} | 0 ...nswerViewUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en].png} | 0 ...werViewUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en].png} | 0 ...ContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en].png} | 0 ...ntentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en].png} | 0 ...ollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en].png} | 0 ...lContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en].png} | 0 ...ull_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en].png} | 0 ...l_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en].png} | 0 ...ull_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en].png} | 0 ..._PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en].png} | 0 ...d_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en].png} | 0 ...null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en].png} | 0 ...l_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en].png} | 0 ...PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en].png} | 0 ...null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en].png} | 0 ...null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png} | 0 ...null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en].png} | 0 ...null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png} | 0 ...null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en].png} | 0 ...null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png} | 0 ...null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png} | 0 ...null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en].png} | 0 ...ll_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en].png} | 0 ...ll_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png} | 0 ...ll_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en].png} | 0 ...ll_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png} | 0 ...ll_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en].png} | 0 ...ll_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png} | 0 ...ll_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png} | 0 ...ll_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en].png} | 0 ...l_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en].png} | 0 ...l_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en].png} | 0 ...l_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en].png} | 0 ...RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en].png} | 0 ...RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en].png} | 0 ...RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en].png} | 0 ..._null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en].png} | 0 ..._null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en].png} | 0 ..._null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en].png} | 0 ..._null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en].png} | 0 ..._null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en].png} | 0 ..._null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en].png} | 0 ..._null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en].png} | 0 ..._null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en].png} | 0 ...omNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en].png} | 0 ...NotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en].png} | 0 ...ll_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en].png} | 0 ...ll_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en].png} | 0 ...ll_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en].png} | 0 ...ll_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en].png} | 0 ...ll_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en].png} | 0 ...ll_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en].png} | 0 ...ll_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en].png} | 0 ...ll_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en].png} | 0 ...w_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en].png} | 0 ...null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en].png} | 0 ..._RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en].png} | 0 ..._RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en].png} | 0 ..._RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en].png} | 0 ...ure_null_AsyncIndicatorFailure-Day_0_null,NEXUS_5,1.0,en].png} | 0 ...e_null_AsyncIndicatorFailure-Night_1_null,NEXUS_5,1.0,en].png} | 0 ...ing_null_AsyncIndicatorLoading-Day_0_null,NEXUS_5,1.0,en].png} | 0 ...g_null_AsyncIndicatorLoading-Night_1_null,NEXUS_5,1.0,en].png} | 0 ...arColors_null_UserAvatarColors-Day_0_null,NEXUS_5,1.0,en].png} | 0 ...Colors_null_UserAvatarColors-Night_1_null,NEXUS_5,1.0,en].png} | 0 ...loatingActionButtonCircleShape-Day_0_null,NEXUS_5,1.0,en].png} | 0 ...atingActionButtonCircleShape-Night_1_null,NEXUS_5,1.0,en].png} | 0 ...erencePage_null_PreferencePage-Day_0_null,NEXUS_5,1.0,en].png} | 0 ...encePage_null_PreferencePage-Night_1_null,NEXUS_5,1.0,en].png} | 0 ...l_null_PageTitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en].png} | 0 ...l_null_PageTitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en].png} | 0 ...l_null_PageTitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en].png} | 0 ...l_null_PageTitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en].png} | 0 ...l_null_PageTitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en].png} | 0 ...null_PageTitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en].png} | 0 ...null_PageTitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en].png} | 0 ...null_PageTitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en].png} | 0 ...null_PageTitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en].png} | 0 ...null_PageTitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en].png} | 0 ..._null_PageTitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en].png} | 0 ...ull_PageTitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en].png} | 0 ...ler_WithRulers_null_WithRulers-Day_0_null,NEXUS_5,1.0,en].png} | 0 ...r_WithRulers_null_WithRulers-Night_1_null,NEXUS_5,1.0,en].png} | 0 ...t_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png} | 0 ...null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en].png} | 0 ...tion_null_FormattingOption-Day-10_11_null,NEXUS_5,1.0,en].png} | 0 ...on_null_FormattingOption-Night-10_12_null,NEXUS_5,1.0,en].png} | 0 200 files changed, 0 insertions(+), 0 deletions(-) rename tests/uitests/src/test/snapshots/images/{ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_2,NEXUS_5,1.0,en].png => ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_2,NEXUS_5,1.0,en].png => ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Day-3_3_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Night-3_4_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesAddReactionButton_null_MessagesAddReactionButton-Day-12_12_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesAddReactionButton_null_MessagesAddReactionButton-Night-12_13_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionExtraButtons_null_MessagesReactionExtraButtons-Day-13_13_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionExtraButtons_null_MessagesReactionExtraButtons-Night-13_14_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Day-6_7_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Night-6_8_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedNotSelected_null_PollAnswerUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedNotSelected_null_PollAnswerUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedSelected_null_PollAnswerUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedSelected_null_PollAnswerUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Day-11_12_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Night-11_13_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Day-8_9_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Night-8_10_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Day-9_10_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Night-9_11_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Day-7_8_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Night-7_9_null,NEXUS_5,1.0,en].png => ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Day-5_6_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Night-5_7_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Day-7_8_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Night-7_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-10_11_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-10_12_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Failed__null_AsyncIndicatorView_Failed_-Day_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Day_0_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Failed__null_AsyncIndicatorView_Failed_-Night_1_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Night_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Loading__null_AsyncIndicatorView_Loading_-Day_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Day_0_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Loading__null_AsyncIndicatorView_Loading_-Night_1_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Night_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.avatar_UserAvatar_null_UserAvatar-Day_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Day_0_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.avatar_UserAvatar_null_UserAvatar-Night_1_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Night_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.button_GradientSendButton_null_GradientSendButton-Day_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Day_0_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.button_GradientSendButton_null_GradientSendButton-Night_1_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Night_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.preferences_PreferenceView_null_PreferenceView-Day_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.preferences_PreferencePage_null_PreferencePage-Day_0_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.preferences_PreferenceView_null_PreferenceView-Night_1_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.preferences_PreferencePage_null_PreferencePage-Night_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconMinimal_null_TitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_TitleWithIconMinimal_null_TitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.ruler_WithRuler_null_WithRuler-Day_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Day_0_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.ruler_WithRuler_null_WithRuler-Night_1_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Night_1_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.textcomposer.components_FormattingButton_null_FormattingButton-Day-10_11_null,NEXUS_5,1.0,en].png => ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Day-10_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.textcomposer.components_FormattingButton_null_FormattingButton-Night-10_12_null,NEXUS_5,1.0,en].png => ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Night-10_12_null,NEXUS_5,1.0,en].png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Day-3_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Day-3_3_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Night-3_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Night-3_4_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesAddReactionButton_null_MessagesAddReactionButton-Day-12_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesAddReactionButton_null_MessagesAddReactionButton-Day-12_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesAddReactionButton_null_MessagesAddReactionButton-Night-12_13_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesAddReactionButton_null_MessagesAddReactionButton-Night-12_13_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionExtraButtons_null_MessagesReactionExtraButtons-Day-13_13_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionExtraButtons_null_MessagesReactionExtraButtons-Day-13_13_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionExtraButtons_null_MessagesReactionExtraButtons-Night-13_14_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionExtraButtons_null_MessagesReactionExtraButtons-Night-13_14_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Day-6_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Day-6_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Night-6_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Night-6_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedNotSelected_null_PollAnswerUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedNotSelected_null_PollAnswerUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedNotSelected_null_PollAnswerUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedNotSelected_null_PollAnswerUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedSelected_null_PollAnswerUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedSelected_null_PollAnswerUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedSelected_null_PollAnswerUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedSelected_null_PollAnswerUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Day-11_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Day-11_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Night-11_13_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Night-11_13_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Day-8_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Day-8_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Night-8_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Night-8_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Day-9_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Day-9_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Night-9_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Night-9_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Day-7_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Day-7_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Night-7_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Night-7_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Day-5_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Day-5_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Night-5_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Night-5_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Day-7_8_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Day-7_8_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Night-7_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Night-7_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-10_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-10_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-10_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-10_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Failed__null_AsyncIndicatorView_Failed_-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Day_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Failed__null_AsyncIndicatorView_Failed_-Day_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Day_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Failed__null_AsyncIndicatorView_Failed_-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Night_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Failed__null_AsyncIndicatorView_Failed_-Night_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Loading__null_AsyncIndicatorView_Loading_-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Day_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Loading__null_AsyncIndicatorView_Loading_-Day_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Day_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Loading__null_AsyncIndicatorView_Loading_-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Night_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Loading__null_AsyncIndicatorView_Loading_-Night_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.avatar_UserAvatar_null_UserAvatar-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Day_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.avatar_UserAvatar_null_UserAvatar-Day_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Day_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.avatar_UserAvatar_null_UserAvatar-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Night_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.avatar_UserAvatar_null_UserAvatar-Night_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_GradientSendButton_null_GradientSendButton-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Day_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_GradientSendButton_null_GradientSendButton-Day_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Day_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_GradientSendButton_null_GradientSendButton-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Night_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_GradientSendButton_null_GradientSendButton-Night_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.preferences_PreferenceView_null_PreferenceView-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.preferences_PreferencePage_null_PreferencePage-Day_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.preferences_PreferenceView_null_PreferenceView-Day_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.preferences_PreferencePage_null_PreferencePage-Day_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.preferences_PreferenceView_null_PreferenceView-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.preferences_PreferencePage_null_PreferencePage-Night_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.preferences_PreferenceView_null_PreferenceView-Night_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.preferences_PreferencePage_null_PreferencePage-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconMinimal_null_TitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconMinimal_null_TitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconMinimal_null_TitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_TitleWithIconMinimal_null_TitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.ruler_WithRuler_null_WithRuler-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Day_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.ruler_WithRuler_null_WithRuler-Day_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Day_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.ruler_WithRuler_null_WithRuler-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Night_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.ruler_WithRuler_null_WithRuler-Night_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer.components_FormattingButton_null_FormattingButton-Day-10_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Day-10_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer.components_FormattingButton_null_FormattingButton-Day-10_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Day-10_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer.components_FormattingButton_null_FormattingButton-Night-10_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Night-10_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer.components_FormattingButton_null_FormattingButton-Night-10_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Night-10_12_null,NEXUS_5,1.0,en].png From 8b8c53073806dcefdc5b53b3acba4260bb7b70b9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 15:01:30 +0200 Subject: [PATCH 103/289] Split long line --- .../io/element/android/tests/konsist/KonsistImportTest.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt index 5f82a1251e..71e8706e3d 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt @@ -27,7 +27,8 @@ class KonsistImportTest { .scopeFromProject() .imports .assertFalse( - additionalMessage = "Please use 'androidx.annotation.VisibleForTesting' instead of 'org.jetbrains.annotations.VisibleForTesting' (project convention).", + additionalMessage = "Please use 'androidx.annotation.VisibleForTesting' instead of " + + "'org.jetbrains.annotations.VisibleForTesting' (project convention).", ) { it.name == "org.jetbrains.annotations.VisibleForTesting" } From f29e79d64e0494f354222cb2b598ad02d739e370 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 18:05:57 +0200 Subject: [PATCH 104/289] Change API `MatrixClient.joinRoom(roomId: RoomId): Result` to `MatrixClient.joinRoom(roomId: RoomId): Result` --- .../impl/response/AcceptDeclineInvitePresenter.kt | 12 +++++++----- .../response/AcceptDeclineInvitePresenterTest.kt | 6 +++--- .../impl/root/RoomDirectoryPresenter.kt | 1 + .../features/roomdirectory/impl/root/di/JoinRoom.kt | 2 +- .../features/roomdirectory/impl/root/FakeJoinRoom.kt | 2 +- .../impl/root/RoomDirectoryPresenterTest.kt | 8 ++++---- .../android/libraries/matrix/api/MatrixClient.kt | 2 +- .../libraries/matrix/impl/RustMatrixClient.kt | 3 +-- .../libraries/matrix/test/FakeMatrixClient.kt | 6 +++--- 9 files changed, 22 insertions(+), 20 deletions(-) diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenter.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenter.kt index 5f7e80b7b1..ec18aea045 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenter.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenter.kt @@ -102,12 +102,14 @@ class AcceptDeclineInvitePresenter @Inject constructor( private fun CoroutineScope.acceptInvite(roomId: RoomId, acceptedAction: MutableState>) = launch { acceptedAction.runUpdatingState { - client.joinRoom(roomId).onSuccess { - notificationDrawerManager.clearMembershipNotificationForRoom(client.sessionId, roomId, doRender = true) - client.getRoom(roomId)?.use { room -> - analyticsService.capture(room.toAnalyticsJoinedRoom(JoinedRoom.Trigger.Invite)) + client.joinRoom(roomId) + .onSuccess { + notificationDrawerManager.clearMembershipNotificationForRoom(client.sessionId, roomId, doRender = true) + client.getRoom(roomId)?.use { room -> + analyticsService.capture(room.toAnalyticsJoinedRoom(JoinedRoom.Trigger.Invite)) + } } - } + .map { roomId } } } diff --git a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenterTest.kt b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenterTest.kt index dfb330da59..90dcc104d4 100644 --- a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenterTest.kt +++ b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenterTest.kt @@ -164,7 +164,7 @@ class AcceptDeclineInvitePresenterTest { @Test fun `present - accepting invite error flow`() = runTest { val joinRoomFailure = lambdaRecorder { roomId: RoomId -> - Result.failure(RuntimeException("Failed to join room $roomId")) + Result.failure(RuntimeException("Failed to join room $roomId")) } val client = FakeMatrixClient().apply { joinRoomLambda = joinRoomFailure @@ -197,8 +197,8 @@ class AcceptDeclineInvitePresenterTest { @Test fun `present - accepting invite success flow`() = runTest { - val joinRoomSuccess = lambdaRecorder { roomId: RoomId -> - Result.success(roomId) + val joinRoomSuccess = lambdaRecorder { _: RoomId -> + Result.success(Unit) } val client = FakeMatrixClient().apply { joinRoomLambda = joinRoomSuccess diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt index 5d4cef55cb..4f9130613f 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt @@ -108,6 +108,7 @@ class RoomDirectoryPresenter @Inject constructor( private fun CoroutineScope.joinRoom(state: MutableState>, roomId: RoomId) = launch { state.runUpdatingState { joinRoom(roomId) + .map { roomId } } } diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/di/JoinRoom.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/di/JoinRoom.kt index 983d2a1dd2..477b49e4f6 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/di/JoinRoom.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/di/JoinRoom.kt @@ -23,7 +23,7 @@ import io.element.android.libraries.matrix.api.core.RoomId import javax.inject.Inject interface JoinRoom { - suspend operator fun invoke(roomId: RoomId): Result + suspend operator fun invoke(roomId: RoomId): Result } @ContributesBinding(SessionScope::class) diff --git a/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/FakeJoinRoom.kt b/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/FakeJoinRoom.kt index 3f4d17aefd..6251bcaefa 100644 --- a/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/FakeJoinRoom.kt +++ b/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/FakeJoinRoom.kt @@ -20,7 +20,7 @@ import io.element.android.features.roomdirectory.impl.root.di.JoinRoom import io.element.android.libraries.matrix.api.core.RoomId class FakeJoinRoom( - var lambda: (RoomId) -> Result = { Result.success(it) } + var lambda: (RoomId) -> Result = { Result.success(Unit) } ) : JoinRoom { override suspend fun invoke(roomId: RoomId) = lambda(roomId) } diff --git a/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt b/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt index eefafc86e1..3af102146b 100644 --- a/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt +++ b/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt @@ -138,11 +138,11 @@ import org.junit.Test @Test fun `present - emit join room event`() = runTest { - val joinRoomSuccess = lambdaRecorder { roomId: RoomId -> - Result.success(roomId) + val joinRoomSuccess = lambdaRecorder { _: RoomId -> + Result.success(Unit) } val joinRoomFailure = lambdaRecorder { roomId: RoomId -> - Result.failure(RuntimeException("Failed to join room $roomId")) + Result.failure(RuntimeException("Failed to join room $roomId")) } val fakeJoinRoom = FakeJoinRoom(joinRoomSuccess) val presenter = createRoomDirectoryPresenter(joinRoom = fakeJoinRoom) @@ -171,7 +171,7 @@ import org.junit.Test roomDirectoryService: RoomDirectoryService = FakeRoomDirectoryService( createRoomDirectoryListFactory = { FakeRoomDirectoryList() } ), - joinRoom: JoinRoom = FakeJoinRoom { Result.success(it) }, + joinRoom: JoinRoom = FakeJoinRoom { Result.success(Unit) }, ): RoomDirectoryPresenter { return RoomDirectoryPresenter( dispatchers = testCoroutineDispatchers(), diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index ac2a00dbdc..3e9c1a264f 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -65,7 +65,7 @@ interface MatrixClient : Closeable { suspend fun setDisplayName(displayName: String): Result suspend fun uploadAvatar(mimeType: String, data: ByteArray): Result suspend fun removeAvatar(): Result - suspend fun joinRoom(roomId: RoomId): Result + suspend fun joinRoom(roomId: RoomId): Result fun syncService(): SyncService fun sessionVerificationService(): SessionVerificationService fun pushersService(): PushersService diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 48683d77ba..f5ec5d71ee 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -440,7 +440,7 @@ class RustMatrixClient( runCatching { client.removeAvatar() } } - override suspend fun joinRoom(roomId: RoomId): Result = withContext(sessionDispatcher) { + override suspend fun joinRoom(roomId: RoomId): Result = withContext(sessionDispatcher) { runCatching { client.joinRoomById(roomId.value).destroy() try { @@ -448,7 +448,6 @@ class RustMatrixClient( } catch (e: Exception) { Timber.e(e, "Timeout waiting for the room to be available in the room list") } - roomId } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index e43d7655f0..8578105f7d 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -103,8 +103,8 @@ class FakeMatrixClient( private var setDisplayNameResult: Result = Result.success(Unit) private var uploadAvatarResult: Result = Result.success(Unit) private var removeAvatarResult: Result = Result.success(Unit) - var joinRoomLambda: (RoomId) -> Result = { - Result.success(it) + var joinRoomLambda: (RoomId) -> Result = { + Result.success(Unit) } var getRoomInfoFlowLambda = { _: RoomId -> @@ -197,7 +197,7 @@ class FakeMatrixClient( return removeAvatarResult } - override suspend fun joinRoom(roomId: RoomId): Result = joinRoomLambda(roomId) + override suspend fun joinRoom(roomId: RoomId): Result = joinRoomLambda(roomId) override fun sessionVerificationService(): SessionVerificationService = sessionVerificationService From 797c912ccdee7f91ffab0ffea98cd199516ae6f7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 17:51:08 +0200 Subject: [PATCH 105/289] Implement Knock action (until the SDK level) --- .../features/joinroom/impl/JoinRoomEvents.kt | 2 ++ .../features/joinroom/impl/JoinRoomNode.kt | 1 + .../joinroom/impl/JoinRoomPresenter.kt | 24 +++++++++++++ .../features/joinroom/impl/JoinRoomState.kt | 2 ++ .../joinroom/impl/JoinRoomStateProvider.kt | 3 ++ .../features/joinroom/impl/JoinRoomView.kt | 17 +++++++-- .../joinroom/impl/di/JoinRoomModule.kt | 2 ++ .../features/joinroom/impl/di/KnockRoom.kt | 32 +++++++++++++++++ .../features/joinroom/impl/FakeKnockRoom.kt | 26 ++++++++++++++ .../joinroom/impl/JoinRoomPresenterTest.kt | 36 +++++++++++++++++++ .../joinroom/impl/JoinRoomViewTest.kt | 21 +++++++++-- .../libraries/matrix/api/MatrixClient.kt | 1 + .../libraries/matrix/impl/RustMatrixClient.kt | 4 +++ .../libraries/matrix/test/FakeMatrixClient.kt | 6 +++- 14 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt create mode 100644 features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/FakeKnockRoom.kt diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt index 7163fc2bad..312efd1ad2 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt @@ -19,6 +19,8 @@ package io.element.android.features.joinroom.impl sealed interface JoinRoomEvents { data object RetryFetchingContent : JoinRoomEvents data object JoinRoom : JoinRoomEvents + data object KnockRoom : JoinRoomEvents + data object ClearError : JoinRoomEvents data object AcceptInvite : JoinRoomEvents data object DeclineInvite : JoinRoomEvents } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt index d83a5f4b20..5d302abc8b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt @@ -49,6 +49,7 @@ class JoinRoomNode @AssistedInject constructor( JoinRoomView( state = state, onBackPressed = ::navigateUp, + onKnockSuccess = ::navigateUp, modifier = modifier ) acceptDeclineInviteView.Render( diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index fbf4aeab31..ce3f0274d6 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -18,19 +18,25 @@ package io.element.android.features.joinroom.impl import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.InviteData +import io.element.android.features.joinroom.impl.di.KnockRoom import io.element.android.features.roomdirectory.api.RoomDescription +import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.architecture.runUpdatingState import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias @@ -39,6 +45,8 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.ui.model.toInviteSender +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import java.util.Optional class JoinRoomPresenter @AssistedInject constructor( @@ -46,6 +54,7 @@ class JoinRoomPresenter @AssistedInject constructor( @Assisted private val roomIdOrAlias: RoomIdOrAlias, @Assisted private val roomDescription: Optional, private val matrixClient: MatrixClient, + private val knockRoom: KnockRoom, private val acceptDeclineInvitePresenter: Presenter, ) : Presenter { interface Factory { @@ -58,8 +67,10 @@ class JoinRoomPresenter @AssistedInject constructor( @Composable override fun present(): JoinRoomState { + val coroutineScope = rememberCoroutineScope() var retryCount by remember { mutableIntStateOf(0) } val roomInfo by matrixClient.getRoomInfoFlow(roomId).collectAsState(initial = Optional.empty()) + val knockAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } val contentState by produceState( initialValue = ContentState.Loading(roomIdOrAlias), key1 = roomInfo, @@ -101,6 +112,9 @@ class JoinRoomPresenter @AssistedInject constructor( AcceptDeclineInviteEvents.AcceptInvite(inviteData) ) } + JoinRoomEvents.KnockRoom -> { + coroutineScope.knockRoom(roomId, knockAction) + } JoinRoomEvents.DeclineInvite -> { val inviteData = contentState.toInviteData() ?: return acceptDeclineInviteState.eventSink( @@ -110,15 +124,25 @@ class JoinRoomPresenter @AssistedInject constructor( JoinRoomEvents.RetryFetchingContent -> { retryCount++ } + JoinRoomEvents.ClearError -> { + knockAction.value = AsyncAction.Uninitialized + } } } return JoinRoomState( contentState = contentState, acceptDeclineInviteState = acceptDeclineInviteState, + knockAction = knockAction.value, eventSink = ::handleEvents ) } + + private fun CoroutineScope.knockRoom(roomId: RoomId, knockAction: MutableState>) = launch { + knockAction.runUpdatingState { + knockRoom(roomId) + } + } } private fun RoomPreview.toContentState(): ContentState { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 14f0cf2012..b32a63cc59 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -18,6 +18,7 @@ package io.element.android.features.joinroom.impl import androidx.compose.runtime.Immutable import io.element.android.features.invite.api.response.AcceptDeclineInviteState +import io.element.android.libraries.architecture.AsyncAction 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.core.RoomAlias @@ -29,6 +30,7 @@ import io.element.android.libraries.matrix.ui.model.InviteSender data class JoinRoomState( val contentState: ContentState, val acceptDeclineInviteState: AcceptDeclineInviteState, + val knockAction: AsyncAction, val eventSink: (JoinRoomEvents) -> Unit ) { val joinAuthorisationStatus = when (contentState) { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 9afd4dd797..e6f50a3676 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -19,6 +19,7 @@ package io.element.android.features.joinroom.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState +import io.element.android.libraries.architecture.AsyncAction 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.core.RoomAlias @@ -105,10 +106,12 @@ fun aLoadedContentState( fun aJoinRoomState( contentState: ContentState = aLoadedContentState(), acceptDeclineInviteState: AcceptDeclineInviteState = anAcceptDeclineInviteState(), + knockAction: AsyncAction = AsyncAction.Uninitialized, eventSink: (JoinRoomEvents) -> Unit = {} ) = JoinRoomState( contentState = contentState, acceptDeclineInviteState = acceptDeclineInviteState, + knockAction = knockAction, eventSink = eventSink ) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index f9bc97231b..7deed58450 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -41,6 +41,7 @@ import io.element.android.libraries.designsystem.atomic.molecules.RoomPreviewMem import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.background.LightGradientBackground +import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton @@ -60,6 +61,7 @@ import io.element.android.libraries.ui.strings.CommonStrings fun JoinRoomView( state: JoinRoomState, onBackPressed: () -> Unit, + onKnockSuccess: () -> Unit, modifier: Modifier = Modifier, ) { val gradientBackground = remember { LightGradientBackground() } @@ -85,12 +87,21 @@ fun JoinRoomView( onJoinRoom = { state.eventSink(JoinRoomEvents.JoinRoom) }, + onKnockRoom = { + state.eventSink(JoinRoomEvents.KnockRoom) + }, onRetry = { state.eventSink(JoinRoomEvents.RetryFetchingContent) } ) } ) + + AsyncActionView( + async = state.knockAction, + onSuccess = { onKnockSuccess() }, + onErrorDismiss = { state.eventSink(JoinRoomEvents.ClearError) }, + ) } @Composable @@ -99,6 +110,7 @@ private fun JoinRoomFooter( onAcceptInvite: () -> Unit, onDeclineInvite: () -> Unit, onJoinRoom: () -> Unit, + onKnockRoom: () -> Unit, onRetry: () -> Unit, modifier: Modifier = Modifier, ) { @@ -142,7 +154,7 @@ private fun JoinRoomFooter( JoinAuthorisationStatus.CanKnock -> { Button( text = stringResource(R.string.screen_join_room_knock_action), - onClick = onJoinRoom, + onClick = onKnockRoom, modifier = modifier.fillMaxWidth(), size = ButtonSize.Large, ) @@ -263,6 +275,7 @@ private fun JoinRoomTopBar( internal fun JoinRoomViewPreview(@PreviewParameter(JoinRoomStateProvider::class) state: JoinRoomState) = ElementPreview { JoinRoomView( state = state, - onBackPressed = { } + onBackPressed = { }, + onKnockSuccess = { }, ) } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt index 3a9e0aec48..b2f9790088 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt @@ -35,6 +35,7 @@ object JoinRoomModule { @Provides fun providesJoinRoomPresenterFactory( client: MatrixClient, + knockRoom: KnockRoom, acceptDeclineInvitePresenter: Presenter, ): JoinRoomPresenter.Factory { return object : JoinRoomPresenter.Factory { @@ -48,6 +49,7 @@ object JoinRoomModule { roomIdOrAlias = roomIdOrAlias, roomDescription = roomDescription, matrixClient = client, + knockRoom = knockRoom, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter, ) } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt new file mode 100644 index 0000000000..e7bfab591b --- /dev/null +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.joinroom.impl.di + +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.libraries.di.SessionScope +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.RoomId +import javax.inject.Inject + +interface KnockRoom { + suspend operator fun invoke(roomId: RoomId): Result +} + +@ContributesBinding(SessionScope::class) +class DefaultKnockRoom @Inject constructor(private val client: MatrixClient) : KnockRoom { + override suspend fun invoke(roomId: RoomId) = client.knockRoom(roomId) +} diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/FakeKnockRoom.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/FakeKnockRoom.kt new file mode 100644 index 0000000000..d21369d2c3 --- /dev/null +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/FakeKnockRoom.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.joinroom.impl + +import io.element.android.features.joinroom.impl.di.KnockRoom +import io.element.android.libraries.matrix.api.core.RoomId + +class FakeKnockRoom( + var lambda: (RoomId) -> Result = { Result.success(Unit) } +) : KnockRoom { + override suspend fun invoke(roomId: RoomId) = lambda(roomId) +} diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index fb36532e2d..2934f09211 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -20,7 +20,9 @@ import com.google.common.truth.Truth.assertThat import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState +import io.element.android.features.joinroom.impl.di.KnockRoom import io.element.android.features.roomdirectory.api.RoomDescription +import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomAlias @@ -269,6 +271,38 @@ class JoinRoomPresenterTest { } } + @Test + fun `present - emit knock room event`() = runTest { + val knockRoomSuccess = lambdaRecorder { _: RoomId -> + Result.success(Unit) + } + val knockRoomFailure = lambdaRecorder { roomId: RoomId -> + Result.failure(RuntimeException("Failed to knock room $roomId")) + } + val fakeKnockRoom = FakeKnockRoom(knockRoomSuccess) + val presenter = createJoinRoomPresenter(knockRoom = fakeKnockRoom) + presenter.test { + skipItems(1) + awaitItem().also { state -> + state.eventSink(JoinRoomEvents.KnockRoom) + } + awaitItem().also { state -> + assertThat(state.knockAction).isEqualTo(AsyncAction.Success(Unit)) + fakeKnockRoom.lambda = knockRoomFailure + state.eventSink(JoinRoomEvents.KnockRoom) + } + awaitItem().also { state -> + assertThat(state.knockAction).isInstanceOf(AsyncAction.Failure::class.java) + } + } + assert(knockRoomSuccess) + .isCalledOnce() + .with(value(A_ROOM_ID)) + assert(knockRoomFailure) + .isCalledOnce() + .with(value(A_ROOM_ID)) + } + @Test fun `present - when room is not known RoomPreview is loaded`() = runTest { val client = FakeMatrixClient( @@ -377,6 +411,7 @@ class JoinRoomPresenterTest { roomId: RoomId = A_ROOM_ID, roomDescription: Optional = Optional.empty(), matrixClient: MatrixClient = FakeMatrixClient(), + knockRoom: KnockRoom = FakeKnockRoom(), acceptDeclineInvitePresenter: Presenter = Presenter { anAcceptDeclineInviteState() } ): JoinRoomPresenter { return JoinRoomPresenter( @@ -384,6 +419,7 @@ class JoinRoomPresenterTest { roomIdOrAlias = roomId.toRoomIdOrAlias(), roomDescription = roomDescription, matrixClient = matrixClient, + knockRoom = knockRoom, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter ) } diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt index 8f3bd5bdd5..bd8f46295d 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -20,6 +20,7 @@ import androidx.activity.ComponentActivity import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.tests.testutils.EnsureNeverCalled import io.element.android.tests.testutils.EventsRecorder @@ -72,11 +73,25 @@ class JoinRoomViewTest { ), ) rule.clickOn(R.string.screen_join_room_knock_action) - eventsRecorder.assertSingle(JoinRoomEvents.JoinRoom) + eventsRecorder.assertSingle(JoinRoomEvents.KnockRoom) } @Test - fun `clicking on Accept invitationon IsInvited room emits the expected Event`() { + fun `clicking on closing Knock error emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanKnock), + knockAction = AsyncAction.Failure(Exception("Error")), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_ok) + eventsRecorder.assertSingle(JoinRoomEvents.ClearError) + } + + @Test + fun `clicking on Accept invitation IsInvited room emits the expected Event`() { val eventsRecorder = EventsRecorder() rule.setJoinRoomView( aJoinRoomState( @@ -118,11 +133,13 @@ class JoinRoomViewTest { private fun AndroidComposeTestRule.setJoinRoomView( state: JoinRoomState, onBackPressed: () -> Unit = EnsureNeverCalled(), + onKnockSuccess: () -> Unit = EnsureNeverCalled(), ) { setContent { JoinRoomView( state = state, onBackPressed = onBackPressed, + onKnockSuccess = onKnockSuccess, ) } } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index 3e9c1a264f..fb20e16c9d 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -66,6 +66,7 @@ interface MatrixClient : Closeable { suspend fun uploadAvatar(mimeType: String, data: ByteArray): Result suspend fun removeAvatar(): Result suspend fun joinRoom(roomId: RoomId): Result + suspend fun knockRoom(roomId: RoomId): Result fun syncService(): SyncService fun sessionVerificationService(): SessionVerificationService fun pushersService(): PushersService diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index f5ec5d71ee..a24c4a35bb 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -451,6 +451,10 @@ class RustMatrixClient( } } + override suspend fun knockRoom(roomId: RoomId): Result { + return Result.failure(NotImplementedError("Not yet implemented")) + } + override suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result = withContext(sessionDispatcher) { runCatching { client.trackRecentlyVisitedRoom(roomId.value) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 8578105f7d..015f764ff5 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -106,7 +106,9 @@ class FakeMatrixClient( var joinRoomLambda: (RoomId) -> Result = { Result.success(Unit) } - + var knockRoomLambda: (RoomId) -> Result = { + Result.success(Unit) + } var getRoomInfoFlowLambda = { _: RoomId -> flowOf>(Optional.empty()) } @@ -199,6 +201,8 @@ class FakeMatrixClient( override suspend fun joinRoom(roomId: RoomId): Result = joinRoomLambda(roomId) + override suspend fun knockRoom(roomId: RoomId): Result = knockRoomLambda(roomId) + override fun sessionVerificationService(): SessionVerificationService = sessionVerificationService override fun pushersService(): PushersService = pushersService From 52f7b295779a1ed63959032377685735d5030be2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 17:36:49 +0200 Subject: [PATCH 106/289] Fix missing background issue. --- .../features/joinroom/impl/JoinRoomView.kt | 71 ++++++++++--------- .../impl/RoomAliasResolverView.kt | 41 ++++++----- .../background/LightGradientBackground.kt | 50 ++++++------- 3 files changed, 85 insertions(+), 77 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 7deed58450..89e7457fee 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -16,15 +16,15 @@ package io.element.android.features.joinroom.impl -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -64,38 +64,41 @@ fun JoinRoomView( onKnockSuccess: () -> Unit, modifier: Modifier = Modifier, ) { - val gradientBackground = remember { LightGradientBackground() } - HeaderFooterPage( - modifier = modifier.background(gradientBackground), - containerColor = Color.Transparent, - paddingValues = PaddingValues(16.dp), - topBar = { - JoinRoomTopBar(onBackClicked = onBackPressed) - }, - content = { - JoinRoomContent(contentState = state.contentState) - }, - footer = { - JoinRoomFooter( - state = state, - onAcceptInvite = { - state.eventSink(JoinRoomEvents.AcceptInvite) - }, - onDeclineInvite = { - state.eventSink(JoinRoomEvents.DeclineInvite) - }, - onJoinRoom = { - state.eventSink(JoinRoomEvents.JoinRoom) - }, - onKnockRoom = { - state.eventSink(JoinRoomEvents.KnockRoom) - }, - onRetry = { - state.eventSink(JoinRoomEvents.RetryFetchingContent) - } - ) - } - ) + Box( + modifier = modifier.fillMaxSize(), + ) { + LightGradientBackground() + HeaderFooterPage( + containerColor = Color.Transparent, + paddingValues = PaddingValues(16.dp), + topBar = { + JoinRoomTopBar(onBackClicked = onBackPressed) + }, + content = { + JoinRoomContent(contentState = state.contentState) + }, + footer = { + JoinRoomFooter( + state = state, + onAcceptInvite = { + state.eventSink(JoinRoomEvents.AcceptInvite) + }, + onDeclineInvite = { + state.eventSink(JoinRoomEvents.DeclineInvite) + }, + onJoinRoom = { + state.eventSink(JoinRoomEvents.JoinRoom) + }, + onKnockRoom = { + state.eventSink(JoinRoomEvents.KnockRoom) + }, + onRetry = { + state.eventSink(JoinRoomEvents.RetryFetchingContent) + } + ) + } + ) + } AsyncActionView( async = state.knockAction, diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index e12ef4170d..cd5bd042c8 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -16,17 +16,17 @@ package io.element.android.features.roomaliasresolver.impl -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -65,23 +65,26 @@ fun RoomAliasResolverView( latestOnAliasResolved(state.resolveState.data) } } - val gradientBackground = remember { LightGradientBackground() } - HeaderFooterPage( - modifier = modifier.background(gradientBackground), - containerColor = Color.Transparent, - paddingValues = PaddingValues(16.dp), - topBar = { - RoomAliasResolverTopBar(onBackClicked = onBackPressed) - }, - content = { - RoomAliasResolverContent(state = state) - }, - footer = { - RoomAliasResolverFooter( - state = state, - ) - } - ) + Box( + modifier = modifier.fillMaxSize(), + ) { + LightGradientBackground() + HeaderFooterPage( + containerColor = Color.Transparent, + paddingValues = PaddingValues(16.dp), + topBar = { + RoomAliasResolverTopBar(onBackClicked = onBackPressed) + }, + content = { + RoomAliasResolverContent(state = state) + }, + footer = { + RoomAliasResolverFooter( + state = state, + ) + } + ) + } } @Composable diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt index 89eede3bc0..793f4891f5 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt @@ -16,46 +16,48 @@ package io.element.android.libraries.designsystem.background -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.geometry.Size import androidx.compose.ui.geometry.center import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.RadialGradientShader -import androidx.compose.ui.graphics.Shader import androidx.compose.ui.graphics.ShaderBrush import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -class LightGradientBackground( - private val firstColor: Color = Color(0x1E0DBD8B), - private val secondColor: Color = Color(0x001273EB), - private val ratio: Float = 642 / 775f, -) : ShaderBrush() { - override fun createShader(size: Size): Shader { +/** + * Light gradient background for Join room screens. + */ +@Composable +fun LightGradientBackground( + modifier: Modifier = Modifier, + backgroundColor: Color = MaterialTheme.colorScheme.background, + firstColor: Color = Color(0x1E0DBD8B), + secondColor: Color = Color(0x001273EB), + ratio: Float = 642 / 775f, +) { + Canvas( + modifier = modifier.fillMaxSize() + ) { val biggerDimension = size.width * 1.98f - return RadialGradientShader( - colors = listOf(firstColor, secondColor), - center = size.center.copy(x = size.width * ratio, y = size.height * ratio), - radius = biggerDimension / 2f, - colorStops = listOf(0f, 0.95f) + val gradientShaderBrush = ShaderBrush( + RadialGradientShader( + colors = listOf(firstColor, secondColor), + center = size.center.copy(x = size.width * ratio, y = size.height * ratio), + radius = biggerDimension / 2f, + colorStops = listOf(0f, 0.95f) + ) ) + drawRect(backgroundColor, size = size) + drawRect(brush = gradientShaderBrush, size = size) } } @PreviewsDayNight @Composable internal fun LightGradientBackgroundPreview() = ElementPreview { - val gradientBackground = remember { - LightGradientBackground() - } - Box( - modifier = Modifier - .fillMaxSize() - .background(gradientBackground) - ) + LightGradientBackground() } From 6b2a4f8cc0c5886a077157e4ffeeb25d85657c6e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 17:38:07 +0200 Subject: [PATCH 107/289] Move OnboardingBackground to a sub package --- .../android/features/analytics/impl/AnalyticsOptInView.kt | 2 +- .../features/ftue/impl/notifications/NotificationsOptInView.kt | 2 +- .../{components => background}/OnboardingBackground.kt | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) rename libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/{components => background}/OnboardingBackground.kt (95%) diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt index 08095a4e33..a2290619ae 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt @@ -43,8 +43,8 @@ import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMo import io.element.android.libraries.designsystem.atomic.organisms.InfoListItem import io.element.android.libraries.designsystem.atomic.organisms.InfoListOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage +import io.element.android.libraries.designsystem.background.OnboardingBackground import io.element.android.libraries.designsystem.components.BigIcon -import io.element.android.libraries.designsystem.components.OnboardingBackground import io.element.android.libraries.designsystem.components.PageTitle import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInView.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInView.kt index b9f902202b..1384d427dc 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInView.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInView.kt @@ -41,8 +41,8 @@ import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.ftue.impl.R import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMolecule import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage +import io.element.android.libraries.designsystem.background.OnboardingBackground import io.element.android.libraries.designsystem.components.BigIcon -import io.element.android.libraries.designsystem.components.OnboardingBackground import io.element.android.libraries.designsystem.components.PageTitle import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarData diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/OnboardingBackground.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/OnboardingBackground.kt similarity index 95% rename from libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/OnboardingBackground.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/OnboardingBackground.kt index 5dbced7417..c8c703e48c 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/OnboardingBackground.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/OnboardingBackground.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.designsystem.components +package io.element.android.libraries.designsystem.background import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.Box @@ -31,6 +31,7 @@ import androidx.compose.ui.graphics.LinearGradientShader import androidx.compose.ui.graphics.ShaderBrush import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.components.drawWithLayer import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight From e4c4832387763090eb4d646676cc1de6788f3668 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Fri, 19 Apr 2024 16:23:43 +0000 Subject: [PATCH 108/289] Update screenshots --- ...ound_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en].png} | 0 ...nd_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en].png} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en].png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en].png From 68631af9a668befb69c550258b0572929ddd5e5e Mon Sep 17 00:00:00 2001 From: bmarty <3940906+bmarty@users.noreply.github.com> Date: Mon, 22 Apr 2024 00:18:11 +0000 Subject: [PATCH 109/289] Sync Strings from Localazy --- .../src/main/res/values-be/translations.xml | 2 +- .../src/main/res/values-cs/translations.xml | 2 +- .../src/main/res/values-de/translations.xml | 7 +- .../src/main/res/values-hu/translations.xml | 7 +- .../src/main/res/values-in/translations.xml | 16 + .../src/main/res/values-ru/translations.xml | 7 +- .../src/main/res/values-sk/translations.xml | 2 +- .../impl/src/main/res/values/localazy.xml | 2 +- .../src/main/res/values-sv/translations.xml | 1 + .../src/main/res/values-be/translations.xml | 4 + .../src/main/res/values-hu/translations.xml | 4 + .../src/main/res/values-ru/translations.xml | 4 + .../src/main/res/values-sk/translations.xml | 4 + .../src/main/res/values-be/translations.xml | 8 +- .../src/main/res/values-bg/translations.xml | 5 + .../src/main/res/values-cs/translations.xml | 6 + .../src/main/res/values-de/translations.xml | 6 + .../src/main/res/values-es/translations.xml | 6 + .../src/main/res/values-fr/translations.xml | 6 + .../src/main/res/values-hu/translations.xml | 6 + .../src/main/res/values-in/translations.xml | 6 + .../src/main/res/values-it/translations.xml | 6 + .../src/main/res/values-ro/translations.xml | 6 + .../src/main/res/values-ru/translations.xml | 6 + .../src/main/res/values-sk/translations.xml | 6 + .../src/main/res/values-sv/translations.xml | 6 + .../src/main/res/values-uk/translations.xml | 6 + .../main/res/values-zh-rTW/translations.xml | 2 + .../src/main/res/values-be/translations.xml | 2 +- .../src/main/res/values-bg/translations.xml | 2 +- .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-fr/translations.xml | 2 +- .../src/main/res/values-hu/translations.xml | 2 +- .../src/main/res/values-sk/translations.xml | 2 +- .../src/main/res/values-be/translations.xml | 12 +- .../src/main/res/values-be/translations.xml | 4 + .../src/main/res/values-bg/translations.xml | 4 + .../src/main/res/values-cs/translations.xml | 4 + .../src/main/res/values-de/translations.xml | 4 + .../src/main/res/values-es/translations.xml | 4 + .../src/main/res/values-fr/translations.xml | 4 + .../src/main/res/values-hu/translations.xml | 4 + .../src/main/res/values-it/translations.xml | 4 + .../src/main/res/values-ro/translations.xml | 4 + .../src/main/res/values-ru/translations.xml | 4 + .../src/main/res/values-sk/translations.xml | 4 + .../src/main/res/values-sv/translations.xml | 4 + .../src/main/res/values-uk/translations.xml | 4 + .../main/res/values-zh-rTW/translations.xml | 4 + .../src/main/res/values-be/translations.xml | 2 +- .../src/main/res/values-in/translations.xml | 1 + ...otView-Day-3_3_null_0,NEXUS_5,1.0,de].png} | 0 ...otView-Day-3_3_null_1,NEXUS_5,1.0,de].png} | 0 ...otView-Day-3_3_null_2,NEXUS_5,1.0,de].png} | 0 ...maryRow-Day-0_1_null_0,NEXUS_5,1.0,de].png | 3 - ...maryRow-Day-0_1_null_1,NEXUS_5,1.0,de].png | 3 - ...maryRow-Day-0_1_null_2,NEXUS_5,1.0,de].png | 3 - ...maryRow-Day-0_1_null_3,NEXUS_5,1.0,de].png | 3 - ...maryRow-Day-0_1_null_4,NEXUS_5,1.0,de].png | 3 - ...istView-Day-1_2_null_0,NEXUS_5,1.0,de].png | 3 - ...istView-Day-1_2_null_1,NEXUS_5,1.0,de].png | 3 - ...istView-Day-1_2_null_2,NEXUS_5,1.0,de].png | 3 - ...istView-Day-1_2_null_3,NEXUS_5,1.0,de].png | 3 - ...istView-Day-1_2_null_4,NEXUS_5,1.0,de].png | 3 - ...istView-Day-1_2_null_5,NEXUS_5,1.0,de].png | 3 - ...istView-Day-1_2_null_6,NEXUS_5,1.0,de].png | 3 - ...iteView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 3 + ...iteView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 3 + ...iteView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 3 + ...iteView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_5,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_6,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_7,NEXUS_5,1.0,de].png | 3 + ...wInApp-Day-4_5_null_0,NEXUS_5,1.0,de].png} | 0 ...wInApp-Day-4_5_null_1,NEXUS_5,1.0,de].png} | 0 ...wInApp-Day-4_5_null_2,NEXUS_5,1.0,de].png} | 0 ...wInApp-Day-4_5_null_3,NEXUS_5,1.0,de].png} | 0 ...wInApp-Day-4_5_null_4,NEXUS_5,1.0,de].png} | 0 ...wInApp-Day-4_5_null_5,NEXUS_5,1.0,de].png} | 0 ...wInApp-Day-4_5_null_6,NEXUS_5,1.0,de].png} | 0 ...ckView-Day-5_6_null_0,NEXUS_5,1.0,de].png} | 0 ...ckView-Day-5_6_null_1,NEXUS_5,1.0,de].png} | 0 ...ckView-Day-5_6_null_2,NEXUS_5,1.0,de].png} | 0 ...ckView-Day-5_6_null_3,NEXUS_5,1.0,de].png} | 0 ...ckView-Day-5_6_null_4,NEXUS_5,1.0,de].png} | 0 ...ckView-Day-5_6_null_5,NEXUS_5,1.0,de].png} | 0 ...ckView-Day-5_6_null_6,NEXUS_5,1.0,de].png} | 0 ...ckerView-Day-3_3_null,NEXUS_5,1.0,de].png} | 0 ...ngView-Day-0_1_null_0,NEXUS_5,1.0,de].png} | 0 ...ngView-Day-0_1_null_1,NEXUS_5,1.0,de].png} | 0 ...ngView-Day-0_1_null_2,NEXUS_5,1.0,de].png} | 0 ...ngView-Day-0_1_null_3,NEXUS_5,1.0,de].png} | 0 ...ngView-Day-0_1_null_4,NEXUS_5,1.0,de].png} | 0 ...Selected-Day-0_1_null,NEXUS_5,1.0,de].png} | 0 ...Selected-Day-1_2_null,NEXUS_5,1.0,de].png} | 0 ...Selected-Day-6_7_null,NEXUS_5,1.0,de].png} | 0 ...Selected-Day-4_5_null,NEXUS_5,1.0,de].png} | 0 ...Selected-Day-5_6_null,NEXUS_5,1.0,de].png} | 0 ...itable-Day-10_11_null,NEXUS_5,1.0,de].png} | 0 ...rEnded-Day-12_13_null,NEXUS_5,1.0,de].png} | 0 ...reator-Day-11_12_null,NEXUS_5,1.0,de].png} | 0 ...isclosed-Day-8_9_null,NEXUS_5,1.0,de].png} | 0 ...ewEnded-Day-9_10_null,NEXUS_5,1.0,de].png} | 0 ...isclosed-Day-7_8_null,NEXUS_5,1.0,de].png} | 0 ...verView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 3 + ...rsView-Day-1_2_null_0,NEXUS_5,1.0,de].png} | 0 ...rsView-Day-1_2_null_1,NEXUS_5,1.0,de].png} | 0 ...rsView-Day-1_2_null_2,NEXUS_5,1.0,de].png} | 0 ...rsView-Day-1_2_null_3,NEXUS_5,1.0,de].png} | 0 ...rsView-Day-1_2_null_4,NEXUS_5,1.0,de].png} | 0 ...rsView-Day-1_2_null_5,NEXUS_5,1.0,de].png} | 0 ...rsView-Day-1_2_null_6,NEXUS_5,1.0,de].png} | 0 ...rsView-Day-1_2_null_7,NEXUS_5,1.0,de].png} | 0 ...Banned-Day-3_4_null_0,NEXUS_5,1.0,de].png} | 0 ...Banned-Day-3_4_null_1,NEXUS_5,1.0,de].png} | 0 ...Banned-Day-3_4_null_2,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_0,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_1,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_2,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_3,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_4,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_6,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_7,NEXUS_5,1.0,de].png} | 0 ...gsOption-Day-5_6_null,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_7_null_0,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_7_null_1,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_7_null_2,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_7_null_3,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_7_null_4,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_7_null_5,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_7_null_6,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-7_8_null_0,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_9_null_0,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_9_null_1,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_9_null_2,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_9_null_3,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_9_null_4,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_9_null_5,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_9_null_6,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_9_null_7,NEXUS_5,1.0,de].png} | 0 ...eyBanner-Day-3_4_null,NEXUS_5,1.0,de].png} | 0 ...ndicator-Day-6_7_null,NEXUS_5,1.0,de].png} | 0 ...stTopBar-Day-5_6_null,NEXUS_5,1.0,de].png} | 0 ...entView-Day-4_5_null_0,NEXUS_5,1.0,de].png | 3 + ...ntView-Day-4_5_null_1,NEXUS_5,1.0,de].png} | 0 ...ntView-Day-4_5_null_3,NEXUS_5,1.0,de].png} | 0 ...ntView-Day-4_5_null_4,NEXUS_5,1.0,de].png} | 0 ...aryRow-Day-8_9_null_28,NEXUS_5,1.0,de].png | 3 + ...aryRow-Day-8_9_null_29,NEXUS_5,1.0,de].png | 3 + ...sView-Day-9_10_null_0,NEXUS_5,1.0,de].png} | 0 ...sView-Day-9_10_null_1,NEXUS_5,1.0,de].png} | 0 ...enView-Day-10_11_null,NEXUS_5,1.0,de].png} | 0 ...ntent-Day-11_12_null_1,NEXUS_5,1.0,de].png | 3 + ...ntent-Day-11_12_null_2,NEXUS_5,1.0,de].png | 3 + ...ntent-Day-12_13_null_1,NEXUS_5,1.0,de].png | 3 - ...intView-Day-0_1_null_0,NEXUS_5,1.0,de].png | 3 - ...intView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 3 - ...entForDm-Day-1_2_null,NEXUS_5,1.0,de].png} | 0 ...tContent-Day-0_1_null,NEXUS_5,1.0,de].png} | 0 ...istView-Day-2_3_null_0,NEXUS_5,1.0,de].png | 3 + ...istView-Day-2_3_null_1,NEXUS_5,1.0,de].png | 3 + ...stView-Day-2_3_null_10,NEXUS_5,1.0,de].png | 3 + ...istView-Day-2_3_null_2,NEXUS_5,1.0,de].png | 3 + ...stView-Day-2_3_null_3,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_4,NEXUS_5,1.0,de].png} | 0 ...istView-Day-2_3_null_5,NEXUS_5,1.0,de].png | 3 + ...stView-Day-2_3_null_6,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_3_null_8,NEXUS_5,1.0,de].png} | 0 ...stView-Day-3_4_null_12,NEXUS_5,1.0,de].png | 3 - ...istView-Day-3_4_null_3,NEXUS_5,1.0,de].png | 3 - ...istView-Day-3_4_null_4,NEXUS_5,1.0,de].png | 3 - ...istView-Day-3_4_null_7,NEXUS_5,1.0,de].png | 3 - ...bleView-Day-1_2_null_0,NEXUS_5,1.0,de].png | 4 +- ...bleView-Day-1_2_null_2,NEXUS_5,1.0,de].png | 4 +- ...bleView-Day-1_2_null_3,NEXUS_5,1.0,de].png | 4 +- ...enderView-Day-2_3_null,NEXUS_5,1.0,de].png | 3 + screenshots/html/data.js | 1149 +++++++++-------- 181 files changed, 866 insertions(+), 653 deletions(-) create mode 100644 features/roomaliasresolver/impl/src/main/res/values-be/translations.xml create mode 100644 features/roomaliasresolver/impl/src/main/res/values-hu/translations.xml create mode 100644 features/roomaliasresolver/impl/src/main/res/values-ru/translations.xml create mode 100644 features/roomaliasresolver/impl/src/main/res/values-sk/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-be/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-bg/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-cs/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-de/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-es/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-fr/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-hu/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-it/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-ro/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-ru/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-sk/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-sv/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-uk/translations.xml create mode 100644 libraries/matrixui/src/main/res/values-zh-rTW/translations.xml rename screenshots/de/{ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_0,NEXUS_5,1.0,de].png => ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_1,NEXUS_5,1.0,de].png => ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_2,NEXUS_5,1.0,de].png => ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Day-3_3_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Day-6_7_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Day-10_11_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Day-12_13_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Day-11_12_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Day-8_9_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Day-9_10_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Day-7_8_null,NEXUS_5,1.0,de].png => ui_T_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Day-5_6_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Day-7_8_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-4_5_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-7_8_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-6_7_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-11_12_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-2_3_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-1_2_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_8,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_10,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,de].png diff --git a/features/ftue/impl/src/main/res/values-be/translations.xml b/features/ftue/impl/src/main/res/values-be/translations.xml index f53a87c797..3c0afc305d 100644 --- a/features/ftue/impl/src/main/res/values-be/translations.xml +++ b/features/ftue/impl/src/main/res/values-be/translations.xml @@ -22,7 +22,7 @@ "Паўтарыць спробу" "Няправільны QR-код" "Перайсці ў налады камеры" - "Каб працягнуць, вам неабходна дазволіць Element выкарыстоўваць камеру вашай прылады." + "Каб працягнуць, вам неабходна дазволіць %1$s выкарыстоўваць камеру вашай прылады." "Дазвольце доступ да камеры для сканавання QR-кода" "Сканаваць QR-код" "Пачаць спачатку" diff --git a/features/ftue/impl/src/main/res/values-cs/translations.xml b/features/ftue/impl/src/main/res/values-cs/translations.xml index 5f41da6de7..c24c2027e7 100644 --- a/features/ftue/impl/src/main/res/values-cs/translations.xml +++ b/features/ftue/impl/src/main/res/values-cs/translations.xml @@ -22,7 +22,7 @@ "Zkusit znovu" "Špatný QR kód" "Přejděte na nastavení fotoaparátu" - "Abyste mohli pokračovat, musíte aplikaci Element udělit povolení k použití kamery vašeho zařízení." + "Abyste mohli pokračovat, musíte aplikaci %1$s udělit povolení k použití kamery vašeho zařízení." "Povolte přístup k fotoaparátu a naskenujte QR kód" "Naskenujte QR kód" "Začít znovu" diff --git a/features/ftue/impl/src/main/res/values-de/translations.xml b/features/ftue/impl/src/main/res/values-de/translations.xml index e7ea08fbfb..771ffe682d 100644 --- a/features/ftue/impl/src/main/res/values-de/translations.xml +++ b/features/ftue/impl/src/main/res/values-de/translations.xml @@ -9,6 +9,8 @@ "Wenn das Problem bestehen bleibt, versuche es mit einem anderen WLAN-Netzwerk oder verwende deine mobilen Daten statt WLAN." "Wenn das nicht funktioniert, melde dich manuell an" "Die Verbindung ist nicht sicher" + "Du wirst aufgefordert, die beiden unten abgebildeten Ziffern einzugeben." + "Nummer auf deinem Gerät eingeben" "%1$s auf einem Desktop-Gerät öffnen" "Klick auf deinen Avatar" "Wähle %1$s" @@ -20,11 +22,14 @@ "Erneut versuchen" "Falscher QR-Code" "Gehe zu den Kameraeinstellungen" - "Du musst Element die Erlaubnis erteilen, die Kamera deines Geräts zu verwenden, um fortzufahren." + "Du musst %1$s die Erlaubnis erteilen, die Kamera deines Geräts zu verwenden, um fortzufahren." "Erlaube Zugriff auf die Kamera zum Scannen des QR-Codes" "QR-Code scannen" "Neu beginnen" "Ein unerwarteter Fehler ist aufgetreten. Bitte versuche es erneut." + "Warten auf dein anderes Gerät" + "Dein Account-Provider kann nach dem folgenden Code fragen, um die Anmeldung zu bestätigen." + "Dein Verifizierungscode" "Anrufe, Umfragen, Suchfunktionen und mehr werden im Laufe des Jahres hinzugefügt." "Der Nachrichtenverlauf für verschlüsselte Räume wird in diesem Update nicht verfügbar sein." "Wir würden uns freuen, von dir zu hören. Teile uns deine Meinung über die Einstellungsseite mit." diff --git a/features/ftue/impl/src/main/res/values-hu/translations.xml b/features/ftue/impl/src/main/res/values-hu/translations.xml index f3b101517a..6354cbe278 100644 --- a/features/ftue/impl/src/main/res/values-hu/translations.xml +++ b/features/ftue/impl/src/main/res/values-hu/translations.xml @@ -9,6 +9,8 @@ "Ha ugyanezzel a problémával találkozik, próbálkozzon másik Wi-Fi-hálózattal, vagy a Wi-Fi helyett használja a mobil-adatkapcsolatát" "Ha ez nem működik, jelentkezzen be kézileg" "A kapcsolat nem biztonságos" + "A rendszer kérni fogja, hogy adja meg az alábbi két számjegyet." + "Adja meg a számot az eszközén" "Nyissa meg az %1$set egy asztali eszközön" "Kattintson a profilképére" "Válassza ezt: %1$s" @@ -20,11 +22,14 @@ "Próbálja újra" "Hibás QR-kód" "Ugrás a kamerabeállításokhoz" - "A folytatáshoz engedélyeznie kell, hogy az Element használhassa az eszköz kameráját." + "A folytatáshoz engedélyeznie kell, hogy az %1$s használhassa az eszköz kameráját." "Engedélyezze a kamera elérését a QR-kód beolvasásához" "Olvassa be a QR-kódot" "Újrakezdés" "Váratlan hiba történt. Próbálja meg újra." + "Várakozás a másik eszközre" + "A fiókszolgáltatója kérheti a következő kódot a bejelentkezése ellenőrzéséhez." + "Az Ön ellenőrzőkódja" "A hívások, szavazások, keresések és egyebek az év további részében kerülnek hozzáadásra." "A titkosított szobák üzenetelőzményei nem lesznek elérhetők ebben a frissítésben." "Szeretnénk hallani a véleményét, ossza meg velünk a beállítások oldalon." diff --git a/features/ftue/impl/src/main/res/values-in/translations.xml b/features/ftue/impl/src/main/res/values-in/translations.xml index bc2c07e6ea..0150e54251 100644 --- a/features/ftue/impl/src/main/res/values-in/translations.xml +++ b/features/ftue/impl/src/main/res/values-in/translations.xml @@ -3,6 +3,14 @@ "Anda dapat mengubah pengaturan Anda nanti." "Izinkan pemberitahuan dan jangan pernah melewatkan pesan" "Membuat koneksi" + "Koneksi aman tidak dapat dibuat ke perangkat baru. Perangkat Anda yang ada masih aman dan Anda tidak perlu khawatir tentang mereka." + "Apa sekarang?" + "Coba masuk lagi dengan kode QR jika ini adalah masalah jaringan" + "Jika Anda mengalami masalah yang sama, coba jaringan Wi-Fi yang berbeda atau gunakan data seluler Anda daripada Wi-Fi" + "Jika tidak berhasil, masuk secara manual" + "Koneksi tidak aman" + "Anda akan diminta untuk memasukkan dua digit yang ditunjukkan di bawah ini." + "Masukkan nomor di perangkat Anda" "Buka %1$s di perangkat desktop" "Klik pada avatar Anda" "Pilih %1$s" @@ -13,7 +21,15 @@ "Gunakan kode QR yang ditampilkan di perangkat lain." "Coba lagi" "Kode QR salah" + "Pergi ke pengaturan kamera" + "Anda perlu memberikan izin ke %1$s untuk menggunakan kamera perangkat Anda untuk melanjutkan." + "Izinkan akses kamera untuk memindai kode QR" "Pindai kode QR" + "Mulai dari awal" + "Terjadi kesalahan tak terduga. Silakan coba lagi." + "Menunggu perangkat Anda yang lain" + "Penyedia akun Anda mungkin meminta kode berikut untuk memverifikasi proses masuk." + "Kode verifikasi Anda" "Panggilan, pemungutan suara, pencarian, dan lainnya akan ditambahkan di tahun ini." "Riwayat pesan untuk ruangan terenkripsi tidak akan tersedia dalam pembaruan ini." "Kami ingin mendengar dari Anda, beri tahu kami pendapat Anda melalui halaman pengaturan." diff --git a/features/ftue/impl/src/main/res/values-ru/translations.xml b/features/ftue/impl/src/main/res/values-ru/translations.xml index e9eeef5329..ca34ccf26d 100644 --- a/features/ftue/impl/src/main/res/values-ru/translations.xml +++ b/features/ftue/impl/src/main/res/values-ru/translations.xml @@ -9,6 +9,8 @@ "Если вы столкнулись с той же проблемой, попробуйте сменить точку доступа Wi-Fi или используйте мобильные данные" "Если это не помогло, войдите вручную" "Соединение не защищено" + "Вам будет предложено ввести две цифры, показанные ниже." + "Введите номер на своем устройстве" "Откройте %1$s на настольном устройстве" "Нажмите на свое изображение" "Выбрать %1$s" @@ -20,11 +22,14 @@ "Повторить попытку" "Неверный QR-код" "Перейдите в настройки камеры" - "Чтобы продолжить, вам необходимо разрешить Element использовать камеру вашего устройства." + "Чтобы продолжить, вам необходимо разрешить %1$s использовать камеру вашего устройства." "Разрешите доступ к камере для сканирования QR-кода" "Сканировать QR-код" "Начать заново" "Произошла непредвиденная ошибка. Пожалуйста, попробуйте еще раз." + "В ожидании другого устройства" + "Поставщик учетной записи может запросить следующий код для подтверждения входа." + "Ваш код подтверждения" "Звонки, опросы, поиск и многое другое будут добавлены позже в этом году." "История сообщений для зашифрованных комнат в этом обновлении будет недоступна." "Мы будем рады услышать ваше мнение, сообщите нам об этом через страницу настроек." diff --git a/features/ftue/impl/src/main/res/values-sk/translations.xml b/features/ftue/impl/src/main/res/values-sk/translations.xml index 846d767df0..dbcf53390e 100644 --- a/features/ftue/impl/src/main/res/values-sk/translations.xml +++ b/features/ftue/impl/src/main/res/values-sk/translations.xml @@ -22,7 +22,7 @@ "Skúste to znova" "Nesprávny QR kód" "Prejsť na nastavenia fotoaparátu" - "Ak chcete pokračovať, musíte udeliť povolenie aplikácii Element používať fotoaparát vášho zariadenia." + "Ak chcete pokračovať, musíte udeliť povolenie aplikácii %1$s používať fotoaparát vášho zariadenia." "Povoľte prístup k fotoaparátu na naskenovanie QR kódu" "Naskenovať QR kód" "Začať odznova" diff --git a/features/ftue/impl/src/main/res/values/localazy.xml b/features/ftue/impl/src/main/res/values/localazy.xml index 5257271845..bf65a7ff0a 100644 --- a/features/ftue/impl/src/main/res/values/localazy.xml +++ b/features/ftue/impl/src/main/res/values/localazy.xml @@ -22,7 +22,7 @@ "Try again" "Wrong QR code" "Go to camera settings" - "You need to give permission for Element to use your device’s camera in order to continue." + "You need to give permission for %1$s to use your device’s camera in order to continue." "Allow camera access to scan the QR code" "Scan the QR code" "Start over" diff --git a/features/lockscreen/impl/src/main/res/values-sv/translations.xml b/features/lockscreen/impl/src/main/res/values-sv/translations.xml index ac64f04efa..636d477498 100644 --- a/features/lockscreen/impl/src/main/res/values-sv/translations.xml +++ b/features/lockscreen/impl/src/main/res/values-sv/translations.xml @@ -6,6 +6,7 @@ "Ta bort PIN-kod" "Är du säker på att du vill ta bort PIN-koden?" "Ta bort PIN-koden?" + "Du måste logga in igen och skapa en ny PIN-kod för att fortsätta" "Du blir utloggad" "Du har %1$d försök att låsa upp" diff --git a/features/roomaliasresolver/impl/src/main/res/values-be/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-be/translations.xml new file mode 100644 index 0000000000..e9465f639f --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values-be/translations.xml @@ -0,0 +1,4 @@ + + + "Не ўдалося разабрацца з псеўданімам пакоя." + diff --git a/features/roomaliasresolver/impl/src/main/res/values-hu/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-hu/translations.xml new file mode 100644 index 0000000000..d1d6d05c98 --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values-hu/translations.xml @@ -0,0 +1,4 @@ + + + "Nem sikerült a szoba álnevének feloldása." + diff --git a/features/roomaliasresolver/impl/src/main/res/values-ru/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-ru/translations.xml new file mode 100644 index 0000000000..53e8da81ca --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values-ru/translations.xml @@ -0,0 +1,4 @@ + + + "Не удалось определить псевдоним комнаты." + diff --git a/features/roomaliasresolver/impl/src/main/res/values-sk/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-sk/translations.xml new file mode 100644 index 0000000000..059788804f --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values-sk/translations.xml @@ -0,0 +1,4 @@ + + + "Nepodarilo sa nájsť alias miestnosti." + diff --git a/features/roomlist/impl/src/main/res/values-be/translations.xml b/features/roomlist/impl/src/main/res/values-be/translations.xml index 8da1365931..ac54eb1d84 100644 --- a/features/roomlist/impl/src/main/res/values-be/translations.xml +++ b/features/roomlist/impl/src/main/res/values-be/translations.xml @@ -2,6 +2,12 @@ "Ваша рэзервовая копія чата зараз не сінхранізавана. Вам трэба пацвердзіць ключ аднаўлення, каб захаваць доступ да рэзервовай копіі чата." "Увядзіце ключ аднаўлення" + "Вы ўпэўненыя, што хочаце адхіліць запрашэнне ў %1$s?" + "Адхіліць запрашэнне" + "Вы ўпэўненыя, што хочаце адмовіцца ад прыватных зносін з %1$s?" + "Адхіліць чат" + "Няма запрашэнняў" + "%1$s (%2$s) запрасіў вас" "Гэта аднаразовы працэс, дзякуем за чаканне." "Налада ўліковага запісу." "Стварыце новую размову або пакой" @@ -16,7 +22,7 @@ "Нізкі прыярытэт" "Вы можаце прыбраць фільтры, каб убачыць іншыя вашыя чаты." "У вас няма чатаў для гэтай катэгорыі" - "Удзельнікі" + "Людзі" "У вас пакуль няма асабістых паведамленняў" "Пакоі" "Вас пакуль няма ў ніводным пакоі" diff --git a/features/roomlist/impl/src/main/res/values-bg/translations.xml b/features/roomlist/impl/src/main/res/values-bg/translations.xml index dfb4f42e8b..8012e4283b 100644 --- a/features/roomlist/impl/src/main/res/values-bg/translations.xml +++ b/features/roomlist/impl/src/main/res/values-bg/translations.xml @@ -1,6 +1,11 @@ + "Резервното копие на чатовете ви в момента не е синхронизирано. Въведете ключа си за възстановяване, за да потвърдите достъпа до резервното копие на чатовете си." "Потвърдете ключа си за възстановяване" + "Сигурни ли сте, че искате да отхвърлите поканата за присъединяване в %1$s?" + "Отказване на покана" + "Няма покани" + "%1$s (%2$s) ви покани" "Създаване на нов разговор или стая" "Започнете, като изпратите съобщение на някого." "Все още няма чатове." diff --git a/features/roomlist/impl/src/main/res/values-cs/translations.xml b/features/roomlist/impl/src/main/res/values-cs/translations.xml index 3a91eb04dc..4168a5224c 100644 --- a/features/roomlist/impl/src/main/res/values-cs/translations.xml +++ b/features/roomlist/impl/src/main/res/values-cs/translations.xml @@ -2,6 +2,12 @@ "Vaše záloha chatu není aktuálně synchronizována. Abyste si zachovali přístup k záloze chatu, musíte potvrdit klíč pro obnovení." "Potvrďte klíč pro obnovení" + "Opravdu chcete odmítnout pozvánku do %1$s?" + "Odmítnout pozvání" + "Opravdu chcete odmítnout tuto soukromou konverzaci s %1$s?" + "Odmítnout chat" + "Žádné pozvánky" + "%1$s (%2$s) vás pozval(a)" "Jedná se o jednorázový proces, prosíme o strpení." "Nastavení vašeho účtu" "Vytvořte novou konverzaci nebo místnost" diff --git a/features/roomlist/impl/src/main/res/values-de/translations.xml b/features/roomlist/impl/src/main/res/values-de/translations.xml index d02870ccd1..ab13ac8bf7 100644 --- a/features/roomlist/impl/src/main/res/values-de/translations.xml +++ b/features/roomlist/impl/src/main/res/values-de/translations.xml @@ -2,6 +2,12 @@ "Dein Chat-Backup ist derzeit nicht synchronisiert. Du musst deinen Wiederherstellungsschlüssel bestätigen, um Zugriff auf dein Chat-Backup zu erhalten." "Wiederherstellungsschlüssel bestätigen." + "Möchtest du die Einladung zum Betreten von %1$s wirklich ablehnen?" + "Einladung ablehnen" + "Bist du sicher, dass du diese Direktnachricht von %1$s ablehnen möchtest?" + "Einladung ablehnen" + "Keine Einladungen" + "%1$s (%2$s) hat dich eingeladen" "Dies ist ein einmaliger Vorgang, danke fürs Warten." "Dein Konto wird eingerichtet." "Eine neue Unterhaltung oder einen neuen Raum erstellen" diff --git a/features/roomlist/impl/src/main/res/values-es/translations.xml b/features/roomlist/impl/src/main/res/values-es/translations.xml index 645651fc9e..3873c335c5 100644 --- a/features/roomlist/impl/src/main/res/values-es/translations.xml +++ b/features/roomlist/impl/src/main/res/values-es/translations.xml @@ -2,6 +2,12 @@ "La copia de seguridad del chat no está sincronizada en este momento. Debes confirmar tu clave de recuperación para mantener el acceso a la copia de seguridad del chat." "Confirma tu clave de recuperación" + "¿Estás seguro de que quieres rechazar la invitación a unirte a %1$s?" + "Rechazar la invitación" + "¿Estás seguro de que quieres rechazar este chat privado con%1$s?" + "Rechazar el chat" + "Sin invitaciones" + "%1$s (%2$s) te invitó" "Este proceso solo se hace una vez, gracias por esperar." "Configura tu cuenta" "Crear una nueva conversación o sala" diff --git a/features/roomlist/impl/src/main/res/values-fr/translations.xml b/features/roomlist/impl/src/main/res/values-fr/translations.xml index fd8606c96b..55b82935d3 100644 --- a/features/roomlist/impl/src/main/res/values-fr/translations.xml +++ b/features/roomlist/impl/src/main/res/values-fr/translations.xml @@ -2,6 +2,12 @@ "La sauvegarde des conversations est désynchronisée. Vous devez confirmer la clé de récupération pour accéder à votre historique." "Confirmer votre clé de récupération" + "Êtes-vous sûr de vouloir décliner l’invitation à rejoindre %1$s ?" + "Refuser l’invitation" + "Êtes-vous sûr de vouloir refuser cette discussion privée avec %1$s ?" + "Refuser l’invitation" + "Aucune invitation" + "%1$s (%2$s) vous a invité(e)" "Il s’agit d’une opération ponctuelle, merci d’attendre quelques instants." "Configuration de votre compte." "Créer une nouvelle discussion ou un nouveau salon" diff --git a/features/roomlist/impl/src/main/res/values-hu/translations.xml b/features/roomlist/impl/src/main/res/values-hu/translations.xml index e25c493b13..47695444d5 100644 --- a/features/roomlist/impl/src/main/res/values-hu/translations.xml +++ b/features/roomlist/impl/src/main/res/values-hu/translations.xml @@ -2,6 +2,12 @@ "A csevegés biztonsági mentése nincs szinkronban. Meg kell erősítenie a helyreállítási kulcsát, hogy továbbra is hozzáférjen a csevegés biztonsági mentéséhez." "Helyreállítási kulcs megerősítése" + "Biztos, hogy elutasítja a meghívást, hogy csatlakozzon ehhez: %1$s?" + "Meghívás elutasítása" + "Biztos, hogy elutasítja ezt a privát csevegést vele: %1$s?" + "Csevegés elutasítása" + "Nincsenek meghívások" + "%1$s (%2$s) meghívta" "Ez egy egyszeri folyamat, köszönjük a türelmét." "A fiók beállítása." "Új beszélgetés vagy szoba létrehozása" diff --git a/features/roomlist/impl/src/main/res/values-in/translations.xml b/features/roomlist/impl/src/main/res/values-in/translations.xml index 8f194e1e34..7f5fd69eee 100644 --- a/features/roomlist/impl/src/main/res/values-in/translations.xml +++ b/features/roomlist/impl/src/main/res/values-in/translations.xml @@ -2,6 +2,12 @@ "Cadangan percakapan Anda saat ini tidak tersinkron. Anda perlu mengonfirmasi kunci pemulihan Anda untuk tetap memiliki akses ke cadangan percakapan Anda." "Konfirmasi kunci pemulihan Anda" + "Apakah Anda yakin ingin menolak undangan untuk bergabung ke %1$s?" + "Tolak undangan" + "Apakah Anda yakin ingin menolak obrolan pribadi dengan %1$s?" + "Tolak obrolan" + "Tidak ada undangan" + "%1$s (%2$s) mengundang Anda" "Ini adalah proses satu kali, terima kasih telah menunggu." "Menyiapkan akun Anda." "Buat percakapan atau ruangan baru" diff --git a/features/roomlist/impl/src/main/res/values-it/translations.xml b/features/roomlist/impl/src/main/res/values-it/translations.xml index 05e41594a2..349057e7c4 100644 --- a/features/roomlist/impl/src/main/res/values-it/translations.xml +++ b/features/roomlist/impl/src/main/res/values-it/translations.xml @@ -2,6 +2,12 @@ "Il backup della chat non è attualmente sincronizzato. Devi confermare la chiave di recupero per mantenere l\'accesso al backup della chat." "Inserisci la chiave di recupero" + "Vuoi davvero rifiutare l\'invito ad entrare in %1$s?" + "Rifiuta l\'invito" + "Vuoi davvero rifiutare questa conversazione privata con %1$s?" + "Rifiuta l\'invito alla conversazione" + "Nessun invito" + "%1$s (%2$s) ti ha invitato" "Si tratta di una procedura che si effettua una sola volta, grazie per l\'attesa." "Configurazione del tuo account." "Crea una nuova conversazione o stanza" diff --git a/features/roomlist/impl/src/main/res/values-ro/translations.xml b/features/roomlist/impl/src/main/res/values-ro/translations.xml index df30bc8239..b766caf8f0 100644 --- a/features/roomlist/impl/src/main/res/values-ro/translations.xml +++ b/features/roomlist/impl/src/main/res/values-ro/translations.xml @@ -2,6 +2,12 @@ "Backup-ul pentru chat nu este sincronizat în prezent. Trebuie să confirmați cheia de recuperare pentru a menține accesul la backup." "Confirmați cheia de recuperare" + "Sigur doriți să refuzați alăturarea la %1$s?" + "Refuzați invitația" + "Sigur doriți să refuzați conversațiile cu %1$s?" + "Refuzați conversația" + "Nicio invitație" + "%1$s (%2$s) v-a invitat." "Acesta este un proces care se desfășoară o singură dată, vă mulțumim pentru așteptare." "Contul dumneavoastră se configurează" "Creați o conversație sau o cameră nouă" diff --git a/features/roomlist/impl/src/main/res/values-ru/translations.xml b/features/roomlist/impl/src/main/res/values-ru/translations.xml index 68cb98436d..bf66490a73 100644 --- a/features/roomlist/impl/src/main/res/values-ru/translations.xml +++ b/features/roomlist/impl/src/main/res/values-ru/translations.xml @@ -5,6 +5,12 @@ "Введите " "ключ восстановления" + "Вы уверены, что хотите отклонить приглашение в %1$s?" + "Отклонить приглашение" + "Вы уверены, что хотите отказаться от личного общения с %1$s?" + "Отклонить чат" + "Нет приглашений" + "%1$s (%2$s) пригласил вас" "Это одноразовый процесс, спасибо, что подождали." "Настройка учетной записи." "Создайте новую беседу или комнату" diff --git a/features/roomlist/impl/src/main/res/values-sk/translations.xml b/features/roomlist/impl/src/main/res/values-sk/translations.xml index 101df1792d..4b610c28b4 100644 --- a/features/roomlist/impl/src/main/res/values-sk/translations.xml +++ b/features/roomlist/impl/src/main/res/values-sk/translations.xml @@ -2,6 +2,12 @@ "Vaša záloha konverzácie nie je momentálne synchronizovaná. Na zachovanie prístupu k zálohe konverzácie musíte potvrdiť svoj kľúč na obnovu." "Potvrďte svoj kľúč na obnovenie" + "Naozaj chcete odmietnuť pozvánku na pripojenie do %1$s?" + "Odmietnuť pozvanie" + "Naozaj chcete odmietnuť túto súkromnú konverzáciu s %1$s?" + "Odmietnuť konverzáciu" + "Žiadne pozvánky" + "%1$s (%2$s) vás pozval/a" "Ide o jednorazový proces, ďakujeme za trpezlivosť." "Nastavenie vášho účtu." "Vytvorte novú konverzáciu alebo miestnosť" diff --git a/features/roomlist/impl/src/main/res/values-sv/translations.xml b/features/roomlist/impl/src/main/res/values-sv/translations.xml index 144a05115c..7bc59f17e8 100644 --- a/features/roomlist/impl/src/main/res/values-sv/translations.xml +++ b/features/roomlist/impl/src/main/res/values-sv/translations.xml @@ -1,5 +1,11 @@ + "Är du säker på att du vill tacka nej till inbjudan att gå med%1$s?" + "Avböj inbjudan" + "Är du säker på att du vill avböja denna privata chatt med %1$s?" + "Avböj chatt" + "Inga inbjudningar" + "%1$s (%2$s) bjöd in dig" "Detta är en engångsprocess, tack för att du väntar." "Konfigurerar ditt konto" "Skapa en ny konversation eller ett nytt rum" diff --git a/features/roomlist/impl/src/main/res/values-uk/translations.xml b/features/roomlist/impl/src/main/res/values-uk/translations.xml index d7ebacd5f7..a7f1c26db0 100644 --- a/features/roomlist/impl/src/main/res/values-uk/translations.xml +++ b/features/roomlist/impl/src/main/res/values-uk/translations.xml @@ -2,6 +2,12 @@ "Ваша резервна копія чату наразі не синхронізована. Вам потрібно підтвердити ключ відновлення, щоб зберегти доступ до резервної копії чату." "Підтвердіть ключ відновлення" + "Ви впевнені, що хочете відхилити запрошення приєднатися до %1$s?" + "Відхилити запрошення" + "Ви дійсно хочете відмовитися від приватного чату з %1$s?" + "Відхилити чат" + "Немає запрошень" + "%1$s (%2$s) запросив (-ла) Вас" "Це одноразовий процес, дякую за очікування." "Налаштування облікового запису." "Створити нову розмову або кімнату" diff --git a/features/roomlist/impl/src/main/res/values-zh-rTW/translations.xml b/features/roomlist/impl/src/main/res/values-zh-rTW/translations.xml index 73b9ea36d1..84de2a0d35 100644 --- a/features/roomlist/impl/src/main/res/values-zh-rTW/translations.xml +++ b/features/roomlist/impl/src/main/res/values-zh-rTW/translations.xml @@ -1,6 +1,8 @@ "輸入您的復原金鑰" + "沒有邀請" + "%1$s(%2$s)邀請您" "這是一次性的程序,感謝您耐心等候。" "正在設定您的帳號。" "建立新的對話或聊天室" diff --git a/features/securebackup/impl/src/main/res/values-be/translations.xml b/features/securebackup/impl/src/main/res/values-be/translations.xml index 9710ac77b1..abf12d905c 100644 --- a/features/securebackup/impl/src/main/res/values-be/translations.xml +++ b/features/securebackup/impl/src/main/res/values-be/translations.xml @@ -21,7 +21,7 @@ "Вы ўпэўнены, што хочаце адключыць рэзервовае капіраванне?" "Адключэнне рэзервовага капіравання прывядзе да выдалення бягучай рэзервовай копіі ключа шыфравання і адключэння іншых функцый бяспекі. У гэтым выпадку вы:" "Не будзеце мець зашыфраванай гісторыі паведамленняў на новых прыладах" - "Страціце доступ да зашыфраваных паведамленняў, калі вы выйдзеце з усіх %1$s сеансаў" + "Страціце доступ да зашыфраваных паведамленняў, калі вы выйдзеце з усіх сеансаў %1$s" "Вы ўпэўнены, што хочаце адключыць рэзервовае капіраванне?" "Атрымайце новы ключ аднаўлення, калі вы страцілі існуючы. Пасля змены ключа аднаўлення ваш стары больш не будзе працаваць." "Стварыць новы ключ аднаўлення" diff --git a/features/securebackup/impl/src/main/res/values-bg/translations.xml b/features/securebackup/impl/src/main/res/values-bg/translations.xml index bc74654eed..1b9eca4c09 100644 --- a/features/securebackup/impl/src/main/res/values-bg/translations.xml +++ b/features/securebackup/impl/src/main/res/values-bg/translations.xml @@ -10,7 +10,7 @@ "Изключване" "Генериране на нов ключ за възстановяване" "Промяна на ключа за възстановяване?" - "Въведете ключа си за възстановяване, за да потвърдите достъпа до резервното копие на чатовете си." + "Уверете се, че никой не може да види този екран!" "Неправилен ключ за възстановяване" "Въведете 48-символния код." "Въведете…" diff --git a/features/securebackup/impl/src/main/res/values-de/translations.xml b/features/securebackup/impl/src/main/res/values-de/translations.xml index f78f0cb3e3..345bd06de1 100644 --- a/features/securebackup/impl/src/main/res/values-de/translations.xml +++ b/features/securebackup/impl/src/main/res/values-de/translations.xml @@ -33,7 +33,7 @@ "Du verlierst deine verschlüsselten Nachrichten, wenn du auf allen Geräten abgemeldet bist." "Bist du sicher, dass du das Backup ausschalten willst?" "Wenn du das Backup ausschaltest, wird dein aktuelles Backup des Verschlüsselungsschlüssels entfernt und andere Sicherheitsfunktionen werden deaktiviert. In diesem Fall wirst du:" - "Kein verschlüsselter Nachrichtenverlauf auf neuen Geräten" + "Keine Historie für verschlüsselte Nachrichten auf neuen Geräten" "Du verlierst den Zugriff auf deine verschlüsselten Nachrichten, wenn du dich überall von %1$s abmeldest" "Bist du sicher, dass du das Backup ausschalten willst?" "Besorge dir einen neuen Wiederherstellungsschlüssel, wenn du deinen alten verloren hast. Nachdem du deinen Wiederherstellungsschlüssel geändert hast, funktioniert dein alter Schlüssel nicht mehr." diff --git a/features/securebackup/impl/src/main/res/values-fr/translations.xml b/features/securebackup/impl/src/main/res/values-fr/translations.xml index 5cedec5328..1e68e15bb9 100644 --- a/features/securebackup/impl/src/main/res/values-fr/translations.xml +++ b/features/securebackup/impl/src/main/res/values-fr/translations.xml @@ -19,7 +19,7 @@ "Désactiver" "Vous perdrez vos messages chiffrés si vous vous déconnectez de toutes vos sessions." "Êtes-vous certain de vouloir désactiver la sauvegarde?" - "Désactiver la sauvegarde supprimera votre clé de récupération actuelle et désactivera d’autres mesures de sécurité. Dans ce cas, vous:" + "Désactiver la sauvegarde supprimera votre clé de récupération actuelle et désactivera d’autres mesures de sécurité. Dans ce cas:" "Pas d’accès à l’historique des discussions chiffrées sur vos nouveaux appareils" "Perte de l’accès à vos messages chiffrés si vous êtes déconnectés de %1$s partout" "Êtes-vous certain de vouloir désactiver la sauvegarde?" diff --git a/features/securebackup/impl/src/main/res/values-hu/translations.xml b/features/securebackup/impl/src/main/res/values-hu/translations.xml index 944174f434..5247d12693 100644 --- a/features/securebackup/impl/src/main/res/values-hu/translations.xml +++ b/features/securebackup/impl/src/main/res/values-hu/translations.xml @@ -20,7 +20,7 @@ "Ha kijelentkezik az összes eszközéről, akkor elveszti a titkosított üzeneteit." "Biztos, hogy kikapcsolja a biztonsági mentéseket?" "A biztonsági mentés kikapcsolása eltávolítja a jelenlegi titkosítási kulcsának mentését, és kikapcsol más biztonsági funkciókat is. Ebben az esetben:" - "Nem lesznek meg a titkosított üzenetelőzményei az új eszközein" + "Nem lesznek meg a titkosított üzenetek előzményei az új eszközein" "Elveszti a titkosított üzenetei hozzáférését, ha mindenhol kilép az %1$sből" "Biztos, hogy kikapcsolja a biztonsági mentéseket?" "Szerezzen új helyreállítási kulcsot, ha elvesztette a meglévőt. A helyreállítása kulcsa módosítása után a régi már nem fog működni." diff --git a/features/securebackup/impl/src/main/res/values-sk/translations.xml b/features/securebackup/impl/src/main/res/values-sk/translations.xml index 8b6be92219..d83efc0adb 100644 --- a/features/securebackup/impl/src/main/res/values-sk/translations.xml +++ b/features/securebackup/impl/src/main/res/values-sk/translations.xml @@ -21,7 +21,7 @@ "Ste si istí, že chcete vypnúť zálohovanie?" "Vypnutím zálohovania sa odstráni aktuálna záloha šifrovacích kľúčov a vypnú sa ďalšie bezpečnostné funkcie. V tomto prípade:" "Na nových zariadeniach nebudete mať zašifrovanú históriu správ" - "Stratíte prístup k svojim zašifrovaným správam, ak sa odhlásite zo všetkých %1$s zariadení" + "Stratíte prístup k svojim zašifrovaným správam, ak sa odhlásite z aplikácie %1$s na všetkých zariadeniach" "Ste si istí, že chcete vypnúť zálohovanie?" "Získajte nový kľúč na obnovenie, ak ste stratili svoj existujúci. Po zmene kľúča na obnovenie už starý kľúč nebude fungovať." "Vygenerovať nový kľúč na obnovenie" diff --git a/libraries/eventformatter/impl/src/main/res/values-be/translations.xml b/libraries/eventformatter/impl/src/main/res/values-be/translations.xml index 00e6e1665e..224c63b03d 100644 --- a/libraries/eventformatter/impl/src/main/res/values-be/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-be/translations.xml @@ -5,12 +5,12 @@ "Вы змянілі свой аватар" "%1$s быў паніжаны(-на) да ўдзельніка" "%1$s быў паніжаны(-на) да мадэратара" - "%1$s змяніў(-ла) сваё адлюстраванае імя з %2$s на %3$s" - "Вы змянілі сваё адлюстраванае імя з %1$s на %2$s" - "%1$s выдаліў(-ла) сваё адлюстраванае імя (яно было %2$s)" - "Вы выдалілі сваё адлюстраванае імя (яно было %1$s)" - "%1$s усталявалі сваё адлюстраванае імя на %2$s" - "Вы ўстанавілі адлюстраванае імя на %1$s" + "%1$s змяніў(-ла) сваё бачнае імя з %2$s на %3$s" + "Вы змянілі сваё бачнае імя з %1$s на %2$s" + "%1$s выдаліў(-ла) сваё бачнае імя (яно было %2$s)" + "Вы выдалілі сваё бачнае імя (яно было %1$s)" + "%1$s усталявалі сваё бачнае імя на %2$s" + "Вы ўстанавілі бачнае імя на %1$s" "%1$s быў(-ла) павышаны(-на) да адміністратара" "%1$s быў(-ла) павышаны(-на) да мадэратара" "%1$s змяніў(-ла) аватар пакоя" diff --git a/libraries/matrixui/src/main/res/values-be/translations.xml b/libraries/matrixui/src/main/res/values-be/translations.xml new file mode 100644 index 0000000000..70b3651411 --- /dev/null +++ b/libraries/matrixui/src/main/res/values-be/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) запрасіў вас" + diff --git a/libraries/matrixui/src/main/res/values-bg/translations.xml b/libraries/matrixui/src/main/res/values-bg/translations.xml new file mode 100644 index 0000000000..2085ebd9f2 --- /dev/null +++ b/libraries/matrixui/src/main/res/values-bg/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) ви покани" + diff --git a/libraries/matrixui/src/main/res/values-cs/translations.xml b/libraries/matrixui/src/main/res/values-cs/translations.xml new file mode 100644 index 0000000000..0e557cc546 --- /dev/null +++ b/libraries/matrixui/src/main/res/values-cs/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) vás pozval(a)" + diff --git a/libraries/matrixui/src/main/res/values-de/translations.xml b/libraries/matrixui/src/main/res/values-de/translations.xml new file mode 100644 index 0000000000..591fe78328 --- /dev/null +++ b/libraries/matrixui/src/main/res/values-de/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) hat dich eingeladen" + diff --git a/libraries/matrixui/src/main/res/values-es/translations.xml b/libraries/matrixui/src/main/res/values-es/translations.xml new file mode 100644 index 0000000000..2d13ddcf91 --- /dev/null +++ b/libraries/matrixui/src/main/res/values-es/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) te invitó" + diff --git a/libraries/matrixui/src/main/res/values-fr/translations.xml b/libraries/matrixui/src/main/res/values-fr/translations.xml new file mode 100644 index 0000000000..fc024258fa --- /dev/null +++ b/libraries/matrixui/src/main/res/values-fr/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) vous a invité(e)" + diff --git a/libraries/matrixui/src/main/res/values-hu/translations.xml b/libraries/matrixui/src/main/res/values-hu/translations.xml new file mode 100644 index 0000000000..573f8e1f10 --- /dev/null +++ b/libraries/matrixui/src/main/res/values-hu/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) meghívta" + diff --git a/libraries/matrixui/src/main/res/values-it/translations.xml b/libraries/matrixui/src/main/res/values-it/translations.xml new file mode 100644 index 0000000000..5f31ef01ba --- /dev/null +++ b/libraries/matrixui/src/main/res/values-it/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) ti ha invitato" + diff --git a/libraries/matrixui/src/main/res/values-ro/translations.xml b/libraries/matrixui/src/main/res/values-ro/translations.xml new file mode 100644 index 0000000000..08576cc20e --- /dev/null +++ b/libraries/matrixui/src/main/res/values-ro/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) v-a invitat." + diff --git a/libraries/matrixui/src/main/res/values-ru/translations.xml b/libraries/matrixui/src/main/res/values-ru/translations.xml new file mode 100644 index 0000000000..4e076cde1d --- /dev/null +++ b/libraries/matrixui/src/main/res/values-ru/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) пригласил вас" + diff --git a/libraries/matrixui/src/main/res/values-sk/translations.xml b/libraries/matrixui/src/main/res/values-sk/translations.xml new file mode 100644 index 0000000000..0fada643d5 --- /dev/null +++ b/libraries/matrixui/src/main/res/values-sk/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) vás pozval/a" + diff --git a/libraries/matrixui/src/main/res/values-sv/translations.xml b/libraries/matrixui/src/main/res/values-sv/translations.xml new file mode 100644 index 0000000000..64200445db --- /dev/null +++ b/libraries/matrixui/src/main/res/values-sv/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) bjöd in dig" + diff --git a/libraries/matrixui/src/main/res/values-uk/translations.xml b/libraries/matrixui/src/main/res/values-uk/translations.xml new file mode 100644 index 0000000000..1b87955e3b --- /dev/null +++ b/libraries/matrixui/src/main/res/values-uk/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) запросив (-ла) Вас" + diff --git a/libraries/matrixui/src/main/res/values-zh-rTW/translations.xml b/libraries/matrixui/src/main/res/values-zh-rTW/translations.xml new file mode 100644 index 0000000000..eb6d87524c --- /dev/null +++ b/libraries/matrixui/src/main/res/values-zh-rTW/translations.xml @@ -0,0 +1,4 @@ + + + "%1$s(%2$s)邀請您" + diff --git a/libraries/ui-strings/src/main/res/values-be/translations.xml b/libraries/ui-strings/src/main/res/values-be/translations.xml index 01a127ae5d..d275443753 100644 --- a/libraries/ui-strings/src/main/res/values-be/translations.xml +++ b/libraries/ui-strings/src/main/res/values-be/translations.xml @@ -164,7 +164,7 @@ "Па-за сеткай" "або" "Пароль" - "Удзельнікі" + "Людзі" "Пастаянная спасылка" "Дазвол" "Вы ўпэўнены, што хочаце скончыць гэтае апытанне?" diff --git a/libraries/ui-strings/src/main/res/values-in/translations.xml b/libraries/ui-strings/src/main/res/values-in/translations.xml index fdbf31da25..b5100b9643 100644 --- a/libraries/ui-strings/src/main/res/values-in/translations.xml +++ b/libraries/ui-strings/src/main/res/values-in/translations.xml @@ -196,6 +196,7 @@ "Pengaturan" "Lokasi terbagi" "Mengeluarkan dari akun" + "Ada yang salah" "Memulai obrolan…" "Stiker" "Berhasil" diff --git a/screenshots/de/ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[appnav.root_Root_null_Root-Day-3_3_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index f3f3ec22b0..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:10a38097c64b4a36c0b01e7616f385749bef1a90c4920cdc06d3bd943ef794b6 -size 30934 diff --git a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index ba29af1988..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2e38226152c1da9bf0fa2dfccff992c36964a1dc21dae5a2d156cbdbaf85fd4e -size 36699 diff --git a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,de].png deleted file mode 100644 index 826af5751f..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:94b119482d40d0748e7381860fae3e9da59fb391f1120205f1204acbec628a57 -size 36776 diff --git a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index e10a417263..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e64a2af4585af369f5d36ad167a9cd743ed9f39b8158b94cb887d42debf5fa45 -size 14675 diff --git a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index 6a67a6e4b4..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:46b92974f6281b4f690728c5b8a438dc17133530551d95d2592a7c3cfcf089f1 -size 31242 diff --git a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index a4e38f9c6c..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34a09c8fc14f87ee2d61fbd4ba030dd50649ba92d263c0c5ad76cfcc5655dab1 -size 60091 diff --git a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index 75bd1edad2..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ad7f6afcd58eb794e69eacec4bd80a9c2352679d20b7c5f2b1e2755858ed7ca2 -size 11354 diff --git a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,de].png deleted file mode 100644 index a4e38f9c6c..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34a09c8fc14f87ee2d61fbd4ba030dd50649ba92d263c0c5ad76cfcc5655dab1 -size 60091 diff --git a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index cfd16d064b..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f233c42e6b275684b7a1b4f88b4316151c87d1fa6cecb65a2d05f3ae050a0dca -size 60060 diff --git a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index 0bfbb3ce21..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1853c0b025f5ae7596c7632ee0712ad37b2049fcd9e0eb0eb8b7f99049e883e1 -size 60129 diff --git a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,de].png deleted file mode 100644 index 06411f14c4..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73c32078b2589df4821a2d7fe3b22dbd35b525a7f0ce795c77817e03f2d3fa1a -size 45626 diff --git a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,de].png deleted file mode 100644 index 06411f14c4..0000000000 --- a/screenshots/de/ui_T_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73c32078b2589df4821a2d7fe3b22dbd35b525a7f0ce795c77817e03f2d3fa1a -size 45626 diff --git a/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..8ab611a9d9 --- /dev/null +++ b/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29884510403259a4cd7a84cf2b9ccd351d8a1c87af6efd483b0fe31ff5cfae5d +size 30379 diff --git a/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..a03c0b7e5a --- /dev/null +++ b/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d23aa9ae59db713298e260c03e5a8441e5518d8276cc33903ace6767c32789cc +size 29376 diff --git a/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..46a3f68728 --- /dev/null +++ b/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9ce2c27e3879de0267e12cee61196844c6906abd90b911eb4db87fdcb9194a7 +size 12264 diff --git a/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..46a3f68728 --- /dev/null +++ b/screenshots/de/ui_T_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9ce2c27e3879de0267e12cee61196844c6906abd90b911eb4db87fdcb9194a7 +size 12264 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..416d65a077 --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44564281cb76d1c1b65e257697d3053b14e0c276a648f35e4e98d74d1cf8375d +size 144995 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..44c0c6c188 --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5e462dd1ce91031eec0c00047dd979c16da87383f185834c5625f6a471c8b34 +size 146409 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..07bddaccc1 --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c2549782c79a31f526a285b72c7c5b20d9c85c44e0dac5f912383348312c21f +size 147694 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..d42bf9fc14 --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cec8d77a89dc89b140a4fd3014eb0d2b09f7eddeecc7aabd1e1ff92ad380d50 +size 145010 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..ba484f5d01 --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fe3070f7ba9eedb9113a1051bf72271dad85f61ff2239692beb7a11767eb6fa +size 153249 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..10b22571b4 --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9665850a9c0d650ea2dd1b804847a3b50446f58af2dc7e195f3395c8d69bb8c6 +size 127389 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..31471f5230 --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c00386260e28913c7a258ea0346988eca7136a3a7a9988ba7697001e045e7939 +size 131812 diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Day-3_3_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Day-3_3_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Day-6_7_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Day-6_7_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Day-10_11_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Day-10_11_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Day-12_13_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Day-12_13_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Day-11_12_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Day-11_12_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Day-8_9_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Day-8_9_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Day-9_10_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Day-9_10_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Day-7_8_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Day-7_8_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..a8c9788e44 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c72c178f1678914e3e74991decf16c41ef68bcdc641b7ef1bf2889d2ced0f80b +size 130124 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Day-5_6_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Day-5_6_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Day-7_8_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Day-7_8_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-4_5_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-4_5_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-7_8_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-7_8_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-6_7_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-6_7_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..7311165659 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b309346d3e5923472b00d7335ee3f064eee23029b3571eeaa82e6d1881a078 +size 46653 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..58beba89b3 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18f98733ed467b7ca388c5dfbebb6514c41266f0f70e6b3e338b7f51648a3a30 +size 26429 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..1126ba8281 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7d9a170ae9babe6ec41ed4052c8830e26141cf4cda86934112d2a464417278a +size 18217 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-11_12_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-11_12_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..b34c1cbd06 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8ef7e3cabe7059c6eb4efe9387bf9037e11baeb936fa1e1267faab3f9a5f4ae +size 25059 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..714413589b --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7563090f98209441c5d52396c1ba5f5b650ca518eabf065a18cf7f0efa9e3dd +size 48724 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index cf0e5444de..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b4f23c0a8a77a1d0e4fa4278c5cec60b53e4b337d9076d450bdbbff7f6dba470 -size 11778 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index 1aec3f1222..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6f68e7ab15df21393fb99a705494f9a5a2433d704ff8ecefbb380578e87c3411 -size 6835 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index 11f697f54c..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:244ea9b20163abdda7d931c8c12c77a2917dfa746a3c85e40f6c3d9d7c1b9925 -size 7267 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-2_3_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-2_3_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-1_2_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-1_2_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..b3a2f9cc26 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de19abe1cc0555fd55675c2b941739e211cd593a4eb87a3fad5a57e5800c1e7c +size 82792 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..b3a2f9cc26 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de19abe1cc0555fd55675c2b941739e211cd593a4eb87a3fad5a57e5800c1e7c +size 82792 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..db358d0f51 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:830c20a4c054afae6670a9fba5e932bd2b3964d7b5400e219ce20034ffdb521c +size 92638 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..f766cae9c3 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4880ef985bd1a4b710da1235aef18340040088d2a26a6416a2f5e69678a28b0 +size 83222 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..1fd584c0a4 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bd7911fcd7acf60c0fbd6587a920791307197f1fe706218172acd75ccf7f44c +size 110468 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_8,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_10,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_10,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,de].png deleted file mode 100644 index edc3988dc9..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdf17aa6597fca6abc2c7ca5156f8dce5682fa3a87cc229370f14b9700784ea6 -size 74817 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index 608cbceaf7..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:715c3558a6aba6ab045071fe866cfa42fbd943edb3a43d2c1100af5ad842ef88 -size 66293 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index 7699837fbc..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0786e2a809f0a84c446cad68071c7d1022c3fa766689c1e05366684871d51956 -size 66689 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,de].png deleted file mode 100644 index db9841dce2..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce710e354bfdf64f656d728995ed163bca87ba69f325f583d76d6160682647e9 -size 96407 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,de].png index 51967eb1e2..defba5df9a 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6b9975ec01b59ce06fcbb5e3c5997bcd6c812e49fe08205896a5d36cd277016 -size 75426 +oid sha256:28b079bc23c422c9a767a655cf77d0fb785d8bbcdc8bdea92a3dc3fe91da41ca +size 76111 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,de].png index ed9648c26c..7ae7da2ccd 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d4f94221a448a04337897953d77f841561a43bfe431e4db6320fd219ea807dd -size 75911 +oid sha256:c7cc27eb6d12beab3b2b05bd8b908f585d02835ad47a2e071ba7d02d2922e7f0 +size 76589 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,de].png index 402cf9e30c..cf722ad2c5 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91f85ee1d099bdf57cd28182a5864104cbed685c7df5c4cc329d19dd42f6d268 -size 46408 +oid sha256:f02f0ee70c7376b00fbe3dce34cc8f699db45de3384619cee02cfef44802e0c7 +size 46219 diff --git a/screenshots/de/ui_T_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..22b8ce0728 --- /dev/null +++ b/screenshots/de/ui_T_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4069cf58cd0cb87d91ebd12b33a4a9544a5fc9d135943426ba1eddb19060da20 +size 12812 diff --git a/screenshots/html/data.js b/screenshots/html/data.js index 6918a023ca..0c163d5a19 100644 --- a/screenshots/html/data.js +++ b/screenshots/html/data.js @@ -1,35 +1,40 @@ // Generated file, do not edit export const screenshots = [ ["en","en-dark","de",], -["ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en]",19835,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Night-2_4_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Night-0_2_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Night-0_2_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_0,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_1,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_1,NEXUS_5,1.0,en]",19828,], +["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_1,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_1,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_2,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_3,NEXUS_5,1.0,en]",19828,], +["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_3,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_4,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Night_1_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Failed__null_AsyncIndicatorView_Failed_-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Failed__null_AsyncIndicatorView_Failed_-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Loading__null_AsyncIndicatorView_Loading_-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncIndicatorView_Loading__null_AsyncIndicatorView_Loading_-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Night_1_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.async_AsyncLoading_null_AsyncLoading-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncLoading_null_AsyncLoading-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Day-4_4_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Night-4_5_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Day-4_4_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Night-4_5_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_2,NEXUS_5,1.0,en]",0,], @@ -39,11 +44,11 @@ export const screenshots = [ ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_6,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_7,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_0,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_1,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_2,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_3,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Night-1_3_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_0,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_1,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_2,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_3,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Night-1_3_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_10,NEXUS_5,1.0,en]","",0,], @@ -110,12 +115,12 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.button_BackButton_null_Buttons_BackButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BigCheckmark_null_BigCheckmark-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_BigCheckmark_null_BigCheckmark-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_BigIcon_null_BigIcon-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_BigIcon_null_BigIcon-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_5,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_5,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_5,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_5,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_2,NEXUS_5,1.0,en]","",0,], @@ -126,36 +131,36 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_7,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_Bloom_null_Bloom_Bloom_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_BottomSheetDragHandle_null_BottomSheetDragHandle-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.theme.components_BottomSheetDragHandle_null_BottomSheetDragHandle-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.atomic.molecules_ButtonColumnMolecule_null_ButtonColumnMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_ButtonColumnMolecule_null_ButtonColumnMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.molecules_ButtonRowMolecule_null_ButtonRowMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_ButtonRowMolecule_null_ButtonRowMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.call.ui_CallScreenView_null_CallScreenView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.call.ui_CallScreenView_null_CallScreenView-Night-0_2_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Night-4_6_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_6,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_6,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.login.impl.changeserver_ChangeServerView_null_ChangeServerView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.changeserver_ChangeServerView_null_ChangeServerView-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_CheckableResolvedUserRow_null_CheckableResolvedUserRow_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.matrix.ui.components_CheckableUnresolvedUserRow_null_CheckableUnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19828,], +["ui_S_t[l.matrix.ui.components_CheckableUnresolvedUserRow_null_CheckableUnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19832,], ["ui_S_t[l.designsystem.theme.components_Checkboxes_null_Toggles_Checkboxes_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_CircularProgressIndicator_null_ProgressIndicators_CircularProgressIndicator_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_ClickableLinkText_null_Text_ClickableLinkText_0_null,NEXUS_5,1.0,en]","",0,], @@ -173,42 +178,42 @@ export const screenshots = [ ["ui_S_t[Typo_Compound_M3 Title Large,NEXUS_5,1.0,en]","",0,], ["ui_S_t[Typo_Compound_M3 Title Medium,NEXUS_5,1.0,en]","",0,], ["ui_S_t[Typo_Compound_M3 Title Small,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.preferences.impl.developer.tracing_ConfigureTracingView_null_ConfigureTracingView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer.tracing_ConfigureTracingView_null_ConfigureTracingView-Night-5_7_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Night-5_7_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-4_6_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Night-5_7_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en]",19835,], ["ui_S_t[l.designsystem.components.dialogs_ConfirmationDialogContent_null_Dialogs_ConfirmationDialogContent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.networkmonitor.api.ui_ConnectivityIndicatorView_null_ConnectivityIndicatorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.networkmonitor.api.ui_ConnectivityIndicatorView_null_ConnectivityIndicatorView-Night-0_2_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Night-0_2_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Night-0_2_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.designsystem.theme.components.previews_DatePickerDark_null_DateTimepickers_DatePickerDark_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[l.designsystem.theme.components.previews_DatePickerLight_null_DateTimepickers_DatePickerLight_0_null,NEXUS_5,1.0,en]","",19828,], +["ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Night-0_2_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Night-0_2_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.theme.components.previews_DatePickerDark_null_DateTimepickers_DatePickerDark_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.designsystem.theme.components.previews_DatePickerLight_null_DateTimepickers_DatePickerLight_0_null,NEXUS_5,1.0,en]","",19832,], ["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_3,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Night-7_9_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-7_9_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-6_8_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Night_1_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Night-7_9_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Night_1_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.theme.components_DialogWithDestructiveButton_null_Dialogs_Dialogwithdestructivebutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DialogWithOnlyMessageAndOkButton_null_Dialogs_Dialogwithonlymessageandokbutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DialogWithThirdButton_null_Dialogs_Dialogwiththirdbutton_0_null,NEXUS_5,1.0,en]","",0,], @@ -219,31 +224,34 @@ export const screenshots = [ ["ui_S_t[l.designsystem.text_DpScale_1_0f__null_DpScale_1_0f__0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.text_DpScale_1_5f__null_DpScale_1_5f__0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DropdownMenuItem_null_Menus_DropdownMenuItem_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Night-10_12_null_0,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Night-10_12_null_0,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLarge_null_ElementLogoAtomLarge-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLarge_null_ElementLogoAtomLarge-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMediumNoBlurShadow_null_ElementLogoAtomMediumNoBlurShadow-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMediumNoBlurShadow_null_ElementLogoAtomMediumNoBlurShadow-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMedium_null_ElementLogoAtomMedium-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMedium_null_ElementLogoAtomMedium-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-31_31_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-31_32_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-32_32_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-32_33_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-57_58_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-57_58_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-62_62_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-62_63_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_FilledButtonLarge_null_Buttons_FilledButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_FilledButtonMedium_null_Buttons_FilledButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], +["ui_S_t[l.designsystem.theme.components_FilledButtonSmall_null_Buttons_FilledButtonSmall_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_FloatingActionButton_null_FloatingActionButtons_FloatingActionButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.atomic.pages_FlowStepPage_null_FlowStepPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_FlowStepPage_null_FlowStepPage-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.textcomposer.components_FormattingButton_null_FormattingButton-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_FormattingButton_null_FormattingButton-Night-10_12_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Night-10_12_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_3,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components.button_GradientFloatingActionButton_null_GradientFloatingActionButton-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_GradientFloatingActionButton_null_GradientFloatingActionButton-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-52_52_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-52_53_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_HeaderFooterPage_null_HeaderFooterPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_HeaderFooterPage_null_HeaderFooterPage-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_HorizontalDivider_null_Dividers_HorizontalDivider_0_null,NEXUS_5,1.0,en]","",0,], @@ -262,30 +270,26 @@ export const screenshots = [ ["ui_S_t[l.designsystem.icons_IconsOther_null_IconsOther-Day_0_null_0,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.icons_IconsOther_null_IconsOther-Night_1_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.molecules_InfoListItemMolecule_null_InfoListItemMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_InfoListItemMolecule_null_InfoListItemMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.organisms_InfoListOrganism_null_InfoListOrganism-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.organisms_InfoListOrganism_null_InfoListOrganism-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.invitelist_InviteListView_null_InviteListView-Night-1_3_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.components_InviteSummaryRow_null_InviteSummaryRow-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_InvitesEntryPointView_null_InvitesEntryPointView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], +["ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en]",19835,], ["ui_S_t[l.designsystem.components_LabelledCheckbox_null_Toggles_LabelledCheckbox_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_LabelledOutlinedTextField_null_LabelledOutlinedTextField-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_LabelledOutlinedTextField_null_LabelledOutlinedTextField-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_LabelledTextField_null_LabelledTextField-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_LabelledTextField_null_LabelledTextField-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_LinearProgressIndicator_null_ProgressIndicators_LinearProgressIndicator_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_Dialogs_ListDialogContent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Night_1_null,NEXUS_5,1.0,en]",0,], @@ -335,35 +339,35 @@ export const screenshots = [ ["ui_S_t[l.designsystem.theme.components_ListSupportingTextSmallPadding_null_Listsections_Listsupportingtext-smallpadding_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.components_LiveWaveformView_null_LiveWaveformView-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_LiveWaveformView_null_LiveWaveformView-Night-11_13_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19828,], +["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], ["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_8,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_9,NEXUS_5,1.0,en]",19828,], +["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_8,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_9,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components.button_MainActionButton_null_Buttons_MainActionButton_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-3_5_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_10,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_2,NEXUS_5,1.0,en]","",19828,], +["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_2,NEXUS_5,1.0,en]","",19832,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_3,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_4,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_5,NEXUS_5,1.0,en]","",0,], @@ -373,10 +377,10 @@ export const screenshots = [ ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_9,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_MediumTopAppBar_null_AppBars_MediumTopAppBar_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.mentions_MentionSpan_null_MentionSpan-Day-18_19_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.mentions_MentionSpan_null_MentionSpan-Night-18_20_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Day-3_3_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView__null_MentionSuggestionsPickerView_-Night-3_4_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en]",19835,], ["ui_S_t[l.designsystem.theme.components.previews_Menu_null_Menus_Menu_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[f.messages.impl.messagecomposer_MessageComposerViewVoice_null_MessageComposerViewVoice-Day-6_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerViewVoice_null_MessageComposerViewVoice-Night-6_7_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Day-5_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Night-5_6_null_0,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Day-5_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Night-5_6_null_0,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_10,NEXUS_5,1.0,en]",0,], @@ -394,29 +398,29 @@ export const screenshots = [ ["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_8,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_9,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-10_10_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-10_11_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessagesAddReactionButton_null_MessagesAddReactionButton-Day-12_12_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesAddReactionButton_null_MessagesAddReactionButton-Night-12_13_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessagesReactionExtraButtons_null_MessagesReactionExtraButtons-Day-13_13_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionExtraButtons_null_MessagesReactionExtraButtons-Night-13_14_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_1,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_1,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.migration_MigrationView_null_MigrationView-Night-11_13_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en]",19835,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetDark_null_BottomSheets_ModalBottomSheetDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetLayoutDark_null_BottomSheets_ModalBottomSheetLayoutDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetLayoutLight_null_BottomSheets_ModalBottomSheetLayoutLight_0_null,NEXUS_5,1.0,en]","",0,], @@ -426,66 +430,73 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItemSelectedTrailingContent_null_Listitems_MultipleselectionListitem-selectionintrailingcontent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItemSelected_null_Listitems_MultipleselectionListitem-selectioninsupportingtext_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItem_null_Listitems_MultipleselectionListitem-noselection_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Night-3_5_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Night-3_5_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_OnBoardingPage_null_OnBoardingPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_OnBoardingPage_null_OnBoardingPage-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingScreen_null_OnBoardingScreen-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en]",19835,], ["ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedButtonLarge_null_Buttons_OutlinedButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedButtonMedium_null_Buttons_OutlinedButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], +["ui_S_t[l.designsystem.theme.components_OutlinedButtonSmall_null_Buttons_OutlinedButtonSmall_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedTextFieldsDark_null_TextFields_OutlinedTextFieldsDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedTextFields_null_TextFields_OutlinedTextFields_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_12_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], +["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_12_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.lockscreen.impl.components_PinEntryTextField_null_PinEntryTextField-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.components_PinEntryTextField_null_PinEntryTextField-Night-0_2_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_PinIcon_null_PinIcon-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PinIcon_null_PinIcon-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.lockscreen.impl.unlock.keypad_PinKeypad_null_PinKeypad-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock.keypad_PinKeypad_null_PinKeypad-Night-6_8_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Day-5_6_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockDefaultView_null_PinUnlockDefaultView-Night-5_7_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockInAppView_null_PinUnlockInAppView-Night-4_6_null_6,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en]",19835,], ["ui_S_t[l.designsystem.atomic.atoms_PlaceholderAtom_null_PlaceholderAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_PlaceholderAtom_null_PlaceholderAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedNotSelected_null_PollAnswerDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerDisclosedSelected_null_PollAnswerDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerEndedSelected_null_PollAnswerEndedSelected-Night-6_8_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerNotSelected_null_PollAnswerEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerEndedWinnerSelected_null_PollAnswerEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedNotSelected_null_PollAnswerUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedNotSelected_null_PollAnswerUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedSelected_null_PollAnswerUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerUndisclosedSelected_null_PollAnswerUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentCreatorEditable_null_PollContentCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentCreatorEnded_null_PollContentCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentCreator_null_PollContentCreator-Night-11_13_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentDisclosed_null_PollContentDisclosed-Night-8_10_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentEnded_null_PollContentEnded-Night-9_11_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentUndisclosed_null_PollContentUndisclosed-Night-7_9_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_4,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_4,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components.preferences_PreferenceCategory_null_Preferences_PreferenceCategory_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceCheckbox_null_Preferences_PreferenceCheckbox_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceDivider_null_Preferences_PreferenceDivider_0_null,NEXUS_5,1.0,en]","",0,], @@ -493,6 +504,7 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.preferences.components_PreferenceIconWithBadge_null_Preferences_PreferenceIconWithBadge_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences.components_PreferenceIcon_null_Preferences_PreferenceIcon_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences.components_PreferenceIcon_null_Preferences_PreferenceIcon_0_null_1,NEXUS_5,1.0,en]","",0,], +["ui_S_t[l.designsystem.components.preferences_PreferencePage_null_PreferencePage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.preferences_PreferencePage_null_PreferencePage-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceRow_null_Preferences_PreferenceRow_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceSlide_null_Preferences_PreferenceSlide_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceSwitch_null_Preferences_PreferenceSwitch_0_null,NEXUS_5,1.0,en]","",0,], @@ -500,281 +512,284 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.preferences_PreferenceTextLight_null_Preferences_PreferenceTextLight_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceTextWithEndBadgeDark_null_Preferences_PreferenceTextWithEndBadgeDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceTextWithEndBadgeLight_null_Preferences_PreferenceTextWithEndBadgeLight_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.designsystem.components.preferences_PreferenceView_null_PreferenceView-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.preferences_PreferenceView_null_PreferenceView-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en]","",19828,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en]","",19832,], ["ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-51_51_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-51_52_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.theme.components_RadioButton_null_Toggles_RadioButton_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Night-1_3_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_0,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Night-1_3_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_10,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_11,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_8,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_9,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_10,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_11,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_8,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_9,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.atomic.atoms_RedIndicatorAtom_null_RedIndicatorAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_RedIndicatorAtom_null_RedIndicatorAtom-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-14_14_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-14_15_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Day-8_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionView_null_RolesAndPermissionView-Night-8_10_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembers_null_RoomInviteMembers-Night-1_3_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-5_7_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-10_12_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-10_11_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-10_12_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-2_4_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-1_3_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-12_13_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-12_14_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_10,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_11,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_11,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_12,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_12,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_8,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-3_4_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-3_5_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberList_null_RoomMemberList-Night-2_4_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_8,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_8,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Day-6_7_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettings_null_RoomNotificationSettings-Night-6_8_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Night-1_3_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomPrivacyOption_null_RoomPrivacyOption-Night-5_7_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-8_10_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_11,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_11,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_12,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_12,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_13,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_13,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_14,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_14,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_15,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_15,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_16,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_16,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_17,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_17,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_18,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_18,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_19,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_19,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_20,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_20,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_21,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_21,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_22,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_22,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_23,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_23,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_24,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_24,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_25,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_25,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_26,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_26,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_27,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_27,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-9_10_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-9_11_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[appnav.root_Root_null_Root-Day-3_3_null_2,NEXUS_5,1.0,en]","ui_S_t[appnav.root_Root_null_Root-Night-3_4_null_2,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Night-1_3_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en]",19835,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en]",19835,], ["ui_S_t[l.designsystem.atomic.atoms_RoundedIconAtom_null_RoundedIconAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_RoundedIconAtom_null_RoundedIconAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Night-1_3_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_1,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Night-1_3_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_1,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveNoneQuery_null_Searchviews_SearchBarActiveNoneQuery_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithContent_null_Searchviews_SearchBarActiveWithContent_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithNoResults_null_Searchviews_SearchBarActiveWithNoResults_0_null,NEXUS_5,1.0,en]","",19828,], +["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithNoResults_null_Searchviews_SearchBarActiveWithNoResults_0_null,NEXUS_5,1.0,en]","",19832,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithQueryNoBackButton_null_Searchviews_SearchBarActiveWithQueryNoBackButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithQuery_null_Searchviews_SearchBarActiveWithQuery_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarInactive_null_Searchviews_SearchBarInactive_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.createroom.impl.components_SearchMultipleUsersResultItem_null_SearchMultipleUsersResultItem_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.createroom.impl.components_SearchSingleUserResultItem_null_SearchSingleUserResultItem_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_8,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-5_7_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-7_9_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-6_8_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-8_10_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.createroom.impl.components_SearchMultipleUsersResultItem_null_SearchMultipleUsersResultItem_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.createroom.impl.components_SearchSingleUserResultItem_null_SearchSingleUserResultItem_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_8,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_SendButton_null_SendButton-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_SendButton_null_SendButton-Night-12_14_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Night-2_4_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_4,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_4,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_10,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_8,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_9,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_10,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_8,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_9,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-53_53_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-53_54_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialogContent_null_Dialogs_SingleSelectionDialogContent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.list_SingleSelectionListItemCustomFormattert_null_Listitems_SingleselectionListitem-customformatter_0_null,NEXUS_5,1.0,en]","",0,], @@ -783,7 +798,7 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.list_SingleSelectionListItemUnselectedWithSupportingText_null_Listitems_SingleselectionListitem-noselection,supportingtext_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_SingleSelectionListItem_null_Listitems_SingleselectionListitem-noselection_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_Sliders_null_Sliders_Sliders_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Night-2_4_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Night-2_4_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionAndCloseButton_null_Snackbars_Snackbarwithactionandclosebutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionOnNewLineAndCloseButton_null_Snackbars_Snackbarwithactionandclosebuttononnewline_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionOnNewLine_null_Snackbars_Snackbarwithactiononnewline_0_null,NEXUS_5,1.0,en]","",0,], @@ -793,21 +808,23 @@ export const screenshots = [ ["ui_S_t[l.designsystem.modifiers_SquareSizeModifierLargeHeight_null_SquareSizeModifierLargeHeight_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.modifiers_SquareSizeModifierLargeWidth_null_SquareSizeModifierLargeWidth_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_1,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.location.api_StaticMapView_null_StaticMapView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.location.api_StaticMapView_null_StaticMapView-Night-0_2_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_SunsetPage_null_SunsetPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_SunsetPage_null_SunsetPage-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components.button_SuperButton_null_SuperButton-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_SuperButton_null_SuperButton-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_Surface_null_Surface_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_Switch_null_Toggles_Switch_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Day-1_1_null,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Night-1_2_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Day-1_1_null,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Night-1_2_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.theme.components_TextButtonLarge_null_Buttons_TextButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_TextButtonMedium_null_Buttons_TextButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Night-2_4_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Night-1_3_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Night-6_8_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Night-5_7_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Night-7_9_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Night-0_2_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[l.designsystem.theme.components_TextButtonSmall_null_Buttons_TextButtonSmall_0_null,NEXUS_5,1.0,en]","",0,], +["ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Night-2_4_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Night-1_3_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Night-6_8_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Night-5_7_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Night-7_9_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Night-0_2_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.textcomposer_TextComposerVoice_null_TextComposerVoice-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerVoice_null_TextComposerVoice-Night-4_6_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TextDark_null_Text_TextDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_TextFieldDark_null_TextFields_TextFieldDark_0_null,NEXUS_5,1.0,en]","",0,], @@ -819,78 +836,78 @@ export const screenshots = [ ["ui_S_t[l.designsystem.theme.components_TextFieldValueTextFieldDark_null_TextFields_TextFieldValueTextFieldDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.components_TextFormatting_null_TextFormatting-Day-13_14_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_TextFormatting_null_TextFormatting-Night-13_15_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TextLight_null_Text_TextLight_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerHorizontal_null_DateTimepickers_TimePickerHorizontal_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalDark_null_DateTimepickers_TimePickerVerticalDark_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalLight_null_DateTimepickers_TimePickerVerticalLight_0_null,NEXUS_5,1.0,en]","",19828,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerHorizontal_null_DateTimepickers_TimePickerHorizontal_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalDark_null_DateTimepickers_TimePickerVerticalDark_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalLight_null_DateTimepickers_TimePickerVerticalLight_0_null,NEXUS_5,1.0,en]","",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_3,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_3,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-37_37_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-37_38_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-34_35_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-34_35_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-17_17_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-17_18_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-19_20_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-19_20_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_1,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_1,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_10,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_11,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_4,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_4,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_5,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_6,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_8,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_8,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_9,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-16_16_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-16_17_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventTimestampBelow_null_TimelineItemEventTimestampBelow_0_null,NEXUS_5,1.0,en]","",19828,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventTimestampBelow_null_TimelineItemEventTimestampBelow_0_null,NEXUS_5,1.0,en]","",19832,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-24_25_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-23_24_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-24_25_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-23_24_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-38_38_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-38_39_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-39_40_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-39_40_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-25_26_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-25_26_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-27_27_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-27_28_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-28_29_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-29_30_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-28_29_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-29_30_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-26_26_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-26_27_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-54_54_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-54_55_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-59_60_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-42_43_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-60_61_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-59_60_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-42_43_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-60_61_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-30_30_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-30_31_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-43_43_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-43_44_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_0,NEXUS_5,1.0,en]",0,], @@ -902,7 +919,7 @@ export const screenshots = [ ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_4,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-46_47_null,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-46_47_null,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_2,NEXUS_5,1.0,en]",0,], @@ -924,75 +941,69 @@ export const screenshots = [ ["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_9,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-61_61_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-61_62_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-48_48_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-48_49_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_1,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_1,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_11,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_12,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_13,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_14,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_15,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_16,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_11,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_12,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_13,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_14,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_15,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_16,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_4,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_4,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_6,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_6,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_8,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_8,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_0,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_1,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_2,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_TitleWithIconFull_null_TitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_TitleWithIconMinimal_null_TitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_TitleWithIconMinimal_null_TitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TopAppBar_null_AppBars_TopAppBar_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_7,NEXUS_5,1.0,en]",19828,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_7,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_6,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_6,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_7,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_8,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_UnreadIndicatorAtom_null_UnreadIndicatorAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_UnreadIndicatorAtom_null_UnreadIndicatorAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_UnresolvedUserRow_null_UnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19828,], -["ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-9_11_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.avatar_UserAvatar_null_UserAvatar-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.avatar_UserAvatar_null_UserAvatar-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettings_null_UserDefinedRoomNotificationSettings-Night-7_9_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19828,], +["ui_S_t[l.matrix.ui.components_UnresolvedUserRow_null_UnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_4,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_5,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_8,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_9,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_9,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_9,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_9,NEXUS_5,1.0,en]",19832,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_4,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_5,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_6,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_7,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_9,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_9,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.ruler_VerticalRuler_null_VerticalRuler-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_VerticalRuler_null_VerticalRuler-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], @@ -1006,12 +1017,12 @@ export const screenshots = [ ["ui_S_t[l.textcomposer.components_VoiceMessagePreview_null_VoiceMessagePreview-Day-15_16_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessagePreview_null_VoiceMessagePreview-Night-15_17_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_VoiceMessageRecorderButton_null_VoiceMessageRecorderButton-Day-16_17_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessageRecorderButton_null_VoiceMessageRecorderButton-Night-16_18_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_VoiceMessageRecording_null_VoiceMessageRecording-Day-17_18_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessageRecording_null_VoiceMessageRecording-Night-17_19_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_0,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_1,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_2,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_3,NEXUS_5,1.0,en]",19828,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_4,NEXUS_5,1.0,en]",19828,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_4,NEXUS_5,1.0,en]",19832,], ["ui_S_t[l.designsystem.components.media_WaveformPlaybackView_null_WaveformPlaybackView-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.media_WaveformPlaybackView_null_WaveformPlaybackView-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Night-1_3_null,NEXUS_5,1.0,en]",19828,], -["ui_S_t[l.designsystem.ruler_WithRuler_null_WithRuler-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_WithRuler_null_WithRuler-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Night-1_3_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Night_1_null,NEXUS_5,1.0,en]",0,], ]; From 03abfcaadb98fbf71fc7abc835fc4875d9d6f2a1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 11:52:53 +0200 Subject: [PATCH 110/289] Format state Event: use disambiguated Display name #2722. - Rename some parameter and val from `senderDisplayName` (and consort) to `senderDisambiguatedDisplayName`. - In `InReplyToDetails`, replace `senderDisplayName` and `senderAvatarUrl` by `senderProfile`. --- .../impl/actionlist/ActionListView.kt | 4 +- .../impl/timeline/TimelineStateProvider.kt | 4 +- .../components/TimelineItemEventRow.kt | 11 ++--- ...melineItemEventRowLongSenderNamePreview.kt | 2 +- .../TimelineItemEventRowTimestampPreview.kt | 2 +- .../TimelineItemEventRowWithReplyPreview.kt | 8 +++- .../event/TimelineItemContentFactory.kt | 8 +++- .../TimelineItemContentMessageFactory.kt | 12 +++-- .../event/TimelineItemEventFactory.kt | 14 +++--- .../impl/timeline/model/InReplyToDetails.kt | 7 ++- .../impl/timeline/model/TimelineItem.kt | 4 +- .../impl/fixtures/MessageEventFixtures.kt | 2 +- .../TimelineItemContentMessageFactoryTest.kt | 44 +++++++++---------- .../groups/TimelineItemGrouperTest.kt | 2 +- .../timeline/model/InReplyToDetailTest.kt | 10 ++--- .../timeline/model/InReplyToMetadataKtTest.kt | 8 ++-- .../impl/DefaultRoomLastMessageFormatter.kt | 44 +++++++++++-------- .../impl/DefaultTimelineEventFormatter.kt | 8 ++-- .../impl/ProfileChangeContentFormatter.kt | 11 +++-- .../impl/RoomMembershipContentFormatter.kt | 22 +++++----- .../impl/StateContentFormatter.kt | 18 ++++---- .../api/notification/NotificationData.kt | 5 ++- .../api/timeline/item/event/InReplyTo.kt | 3 +- .../timeline/item/event/EventMessageMapper.kt | 5 +-- .../notifications/NotifiableEventResolver.kt | 18 ++++---- .../notifications/RoomGroupMessageCreator.kt | 12 ++--- .../model/NotifiableMessageEvent.kt | 3 +- .../NotifiableEventResolverTest.kt | 4 +- .../fixtures/NotifiableEventFixture.kt | 2 +- 29 files changed, 157 insertions(+), 140 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt index d27263f989..613fb9370f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt @@ -269,9 +269,9 @@ private fun MessageSummary(event: TimelineItem.Event, modifier: Modifier = Modif Spacer(modifier = Modifier.width(8.dp)) Column(modifier = Modifier.weight(1f)) { Row { - if (event.senderDisplayName != null) { + if (event.senderDisambiguatedDisplayName != null) { Text( - text = event.senderDisplayName, + text = event.senderDisambiguatedDisplayName, style = ElementTheme.typography.fontBodySmMedium, color = MaterialTheme.colorScheme.primary ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index ae7f62ebd7..e9322a6087 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -130,7 +130,7 @@ internal fun aTimelineItemEvent( transactionId: TransactionId? = null, isMine: Boolean = false, isEditable: Boolean = false, - senderDisplayName: String = "Sender", + senderDisambiguatedDisplayName: String = "Sender", content: TimelineItemEventContent = aTimelineItemTextContent(), groupPosition: TimelineItemGroupPosition = TimelineItemGroupPosition.None, sendState: LocalEventSendState? = null, @@ -152,7 +152,7 @@ internal fun aTimelineItemEvent( sentTime = "12:34", isMine = isMine, isEditable = isEditable, - senderDisplayName = senderDisplayName, + senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, groupPosition = groupPosition, localSendState = sendState, inReplyTo = inReplyTo, 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 22bce0e873..d5cdd36dab 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 @@ -106,6 +106,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import io.element.android.libraries.matrix.ui.components.AttachmentThumbnail import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.ui.strings.CommonStrings @@ -561,10 +562,10 @@ private fun MessageEventBubbleContent( } } val inReplyTo = @Composable { inReplyTo: InReplyToDetails -> - val senderName = inReplyTo.senderDisplayName ?: inReplyTo.senderId.value + val senderDisambiguatedDisplayName = inReplyTo.senderProfile.getDisambiguatedDisplayName(inReplyTo.senderId) val topPadding = if (showThreadDecoration) 0.dp else 8.dp ReplyToContent( - senderName = senderName, + senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, metadata = inReplyTo.metadata(), modifier = Modifier .padding(top = topPadding, start = 8.dp, end = 8.dp) @@ -609,7 +610,7 @@ private fun MessageEventBubbleContent( @Composable private fun ReplyToContent( - senderName: String, + senderDisambiguatedDisplayName: String, metadata: InReplyToMetadata?, modifier: Modifier = Modifier, ) { @@ -633,13 +634,13 @@ private fun ReplyToContent( ) Spacer(modifier = Modifier.width(8.dp)) } - val a11InReplyToText = stringResource(CommonStrings.common_in_reply_to, senderName) + val a11InReplyToText = stringResource(CommonStrings.common_in_reply_to, senderDisambiguatedDisplayName) Column(verticalArrangement = Arrangement.SpaceBetween) { Text( modifier = Modifier.semantics { contentDescription = a11InReplyToText }, - text = senderName, + text = senderDisambiguatedDisplayName, style = ElementTheme.typography.fontBodySmMedium, textAlign = TextAlign.Start, color = ElementTheme.materialColors.primary, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowLongSenderNamePreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowLongSenderNamePreview.kt index 061ad75690..c374d15709 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowLongSenderNamePreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowLongSenderNamePreview.kt @@ -27,7 +27,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreviewLight internal fun TimelineItemEventRowLongSenderNamePreview() = ElementPreviewLight { ATimelineItemEventRow( event = aTimelineItemEvent( - senderDisplayName = "a long sender display name to test single line and ellipsis at the end of the line", + senderDisambiguatedDisplayName = "a long sender display name to test single line and ellipsis at the end of the line", ), ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowTimestampPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowTimestampPreview.kt index e6525584b8..b9bb881bb6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowTimestampPreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowTimestampPreview.kt @@ -43,7 +43,7 @@ internal fun TimelineItemEventRowTimestampPreview( body = str, ), reactionsState = aTimelineItemReactions(count = 0), - senderDisplayName = "A sender", + senderDisambiguatedDisplayName = "A sender", ), ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt index 20b9a01e3f..ca81acbd72 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt @@ -42,6 +42,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MessageConten import io.element.android.libraries.matrix.api.timeline.item.event.MessageType import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType import io.element.android.libraries.matrix.api.timeline.item.event.PollContent +import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails import io.element.android.libraries.matrix.api.timeline.item.event.StickerMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType @@ -167,8 +168,11 @@ open class InReplyToDetailsProvider : PreviewParameterProvider eventId = EventId("\$event"), eventContent = eventContent, senderId = UserId("@Sender:domain"), - senderDisplayName = "Sender", - senderAvatarUrl = null, + senderProfile = ProfileTimelineDetails.Ready( + displayName = "Sender", + displayNameAmbiguous = false, + avatarUrl = null, + ), textContent = (eventContent as? MessageContent)?.body.orEmpty(), ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt index 4d9cfbea42..807137a978 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt @@ -52,8 +52,12 @@ class TimelineItemContentFactory @Inject constructor( is FailedToParseMessageLikeContent -> failedToParseMessageFactory.create(itemContent) is FailedToParseStateContent -> failedToParseStateFactory.create(itemContent) is MessageContent -> { - val senderDisplayName = eventTimelineItem.senderProfile.getDisambiguatedDisplayName(eventTimelineItem.sender) - messageFactory.create(itemContent, senderDisplayName, eventTimelineItem.eventId) + val senderDisambiguatedDisplayName = eventTimelineItem.senderProfile.getDisambiguatedDisplayName(eventTimelineItem.sender) + messageFactory.create( + content = itemContent, + senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, + eventId = eventTimelineItem.eventId, + ) } is ProfileChangeContent -> profileChangeFactory.create(eventTimelineItem) is RedactedContent -> redactedMessageFactory.create(itemContent) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt index acd99d3704..2aba9c3669 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt @@ -70,17 +70,21 @@ class TimelineItemContentMessageFactory @Inject constructor( private val htmlConverterProvider: HtmlConverterProvider, private val permalinkParser: PermalinkParser, ) { - suspend fun create(content: MessageContent, senderDisplayName: String, eventId: EventId?): TimelineItemEventContent { + suspend fun create( + content: MessageContent, + senderDisambiguatedDisplayName: String, + eventId: EventId?, + ): TimelineItemEventContent { return when (val messageType = content.type) { is EmoteMessageType -> { - val emoteBody = "* $senderDisplayName ${messageType.body.trimEnd()}" + val emoteBody = "* $senderDisambiguatedDisplayName ${messageType.body.trimEnd()}" TimelineItemEmoteContent( body = emoteBody, htmlDocument = messageType.formatted?.toHtmlDocument( permalinkParser = permalinkParser, - prefix = "* $senderDisplayName", + prefix = "* $senderDisambiguatedDisplayName", ), - formattedBody = parseHtml(messageType.formatted, prefix = "* $senderDisplayName") ?: emoteBody.withLinks(), + formattedBody = parseHtml(messageType.formatted, prefix = "* $senderDisambiguatedDisplayName") ?: emoteBody.withLinks(), isEdited = content.isEdited, ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt index 0522379f72..7945a88876 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt @@ -55,14 +55,14 @@ class TimelineItemEventFactory @Inject constructor( val currentSender = currentTimelineItem.event.sender val groupPosition = computeGroupPosition(currentTimelineItem, timelineItems, index) - val (senderDisplayName, senderAvatarUrl) = currentTimelineItem.getSenderInfo() + val (senderDisambiguatedDisplayName, senderAvatarUrl) = currentTimelineItem.getSenderInfo() val timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT) val sentTime = timeFormatter.format(Date(currentTimelineItem.event.timestamp)) val senderAvatarData = AvatarData( id = currentSender.value, - name = senderDisplayName ?: currentSender.value, + name = senderDisambiguatedDisplayName ?: currentSender.value, url = senderAvatarUrl, size = AvatarSize.TimelineSender ) @@ -72,7 +72,7 @@ class TimelineItemEventFactory @Inject constructor( eventId = currentTimelineItem.eventId, transactionId = currentTimelineItem.transactionId, senderId = currentSender, - senderDisplayName = senderDisplayName, + senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, senderAvatar = senderAvatarData, content = contentFactory.create(currentTimelineItem.event), isMine = currentTimelineItem.event.isOwn, @@ -100,23 +100,23 @@ class TimelineItemEventFactory @Inject constructor( } private fun MatrixTimelineItem.Event.getSenderInfo(): Pair { - val senderDisplayName: String? + val senderDisambiguatedDisplayName: String? val senderAvatarUrl: String? when (val senderProfile = event.senderProfile) { ProfileTimelineDetails.Unavailable, ProfileTimelineDetails.Pending, is ProfileTimelineDetails.Error -> { - senderDisplayName = null + senderDisambiguatedDisplayName = null senderAvatarUrl = null } is ProfileTimelineDetails.Ready -> { - senderDisplayName = senderProfile.getDisambiguatedDisplayName(event.sender) + senderDisambiguatedDisplayName = senderProfile.getDisambiguatedDisplayName(event.sender) senderAvatarUrl = senderProfile.avatarUrl } } - return senderDisplayName to senderAvatarUrl + return senderDisambiguatedDisplayName to senderAvatarUrl } private fun MatrixTimelineItem.Event.computeReactionsState(): TimelineItemReactions { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt index 3c629f23fc..83627b5b25 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt @@ -22,6 +22,7 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.timeline.item.event.EventContent import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent +import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails 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.ui.messages.toPlainText @@ -29,8 +30,7 @@ import io.element.android.libraries.matrix.ui.messages.toPlainText data class InReplyToDetails( val eventId: EventId, val senderId: UserId, - val senderDisplayName: String?, - val senderAvatarUrl: String?, + val senderProfile: ProfileTimelineDetails, val eventContent: EventContent?, val textContent: String?, ) @@ -41,8 +41,7 @@ fun InReplyTo.map( is InReplyTo.Ready -> InReplyToDetails( eventId = eventId, senderId = senderId, - senderDisplayName = senderDisplayName, - senderAvatarUrl = senderAvatarUrl, + senderProfile = senderProfile, eventContent = content, textContent = when (content) { is MessageContent -> { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt index fa00c26760..aa21702e35 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt @@ -57,7 +57,7 @@ sealed interface TimelineItem { val eventId: EventId? = null, val transactionId: TransactionId? = null, val senderId: UserId, - val senderDisplayName: String?, + val senderDisambiguatedDisplayName: String?, val senderAvatar: AvatarData, val content: TimelineItemEventContent, val sentTime: String = "", @@ -74,7 +74,7 @@ sealed interface TimelineItem { ) : TimelineItem { val showSenderInformation = groupPosition.isNew() && !isMine - val safeSenderName: String = senderDisplayName ?: senderId.value + val safeSenderName: String = senderDisambiguatedDisplayName ?: senderId.value val failedToSend: Boolean = localSendState is LocalEventSendState.SendingFailed diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt index f700ed34c3..2a4e7e5319 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt @@ -48,7 +48,7 @@ internal fun aMessageEvent( id = eventId?.value.orEmpty(), eventId = eventId, senderId = A_USER_ID, - senderDisplayName = A_USER_NAME, + senderDisambiguatedDisplayName = A_USER_NAME, senderAvatar = AvatarData(A_USER_ID.value, A_USER_NAME, size = AvatarSize.TimelineSender), content = content, sentTime = "", diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt index 6e475707ad..35de78f65b 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt @@ -82,7 +82,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = OtherMessageType(msgType = "a_type", body = "body")), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemTextContent( @@ -100,7 +100,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = LocationMessageType("body", "geo:1,2", "description")), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemLocationContent( @@ -116,7 +116,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = LocationMessageType("body", "", null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemTextContent( @@ -134,7 +134,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = TextMessageType("body", null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemTextContent( @@ -152,7 +152,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = TextMessageType("https://www.example.org", null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) as TimelineItemTextContent val expected = TimelineItemTextContent( @@ -200,7 +200,7 @@ class TimelineItemContentMessageFactoryTest { formatted = FormattedBody(MessageFormat.HTML, expected.toString()) ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) assertThat((result as TimelineItemTextContent).formattedBody).isEqualTo(expected) @@ -218,7 +218,7 @@ class TimelineItemContentMessageFactoryTest { formatted = FormattedBody(MessageFormat.UNKNOWN, "formatted") ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) assertThat((result as TimelineItemTextContent).formattedBody).isNull() @@ -229,7 +229,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = VideoMessageType("body", null, null, MediaSource("url"), null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemVideoContent( @@ -277,7 +277,7 @@ class TimelineItemContentMessageFactoryTest { ), ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemVideoContent( @@ -303,7 +303,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = AudioMessageType("body", MediaSource("url"), null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemAudioContent( @@ -332,7 +332,7 @@ class TimelineItemContentMessageFactoryTest { ) ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemAudioContent( @@ -351,7 +351,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = VoiceMessageType("body", MediaSource("url"), null, null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemVoiceContent( @@ -384,7 +384,7 @@ class TimelineItemContentMessageFactoryTest { ), ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemVoiceContent( @@ -409,7 +409,7 @@ class TimelineItemContentMessageFactoryTest { ) val result = sut.create( content = createMessageContent(type = VoiceMessageType("body", MediaSource("url"), null, null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemAudioContent( @@ -428,7 +428,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = ImageMessageType("body", null, null, MediaSource("url"), null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemImageContent( @@ -499,7 +499,7 @@ class TimelineItemContentMessageFactoryTest { ) ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemImageContent( @@ -524,7 +524,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = FileMessageType("body", MediaSource("url"), null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemFileContent( @@ -559,7 +559,7 @@ class TimelineItemContentMessageFactoryTest { ) ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemFileContent( @@ -578,7 +578,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = NoticeMessageType("body", null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemNoticeContent( @@ -601,7 +601,7 @@ class TimelineItemContentMessageFactoryTest { formatted = FormattedBody(MessageFormat.HTML, "formatted") ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) assertThat((result as TimelineItemNoticeContent).formattedBody).isEqualTo("formatted") @@ -612,7 +612,7 @@ class TimelineItemContentMessageFactoryTest { val sut = createTimelineItemContentMessageFactory() val result = sut.create( content = createMessageContent(type = EmoteMessageType("body", null)), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemEmoteContent( @@ -635,7 +635,7 @@ class TimelineItemContentMessageFactoryTest { formatted = FormattedBody(MessageFormat.HTML, "formatted") ) ), - senderDisplayName = "Bob", + senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) assertThat((result as TimelineItemEmoteContent).formattedBody).isEqualTo(SpannableString("* Bob formatted")) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt index 42d4b3388a..d560a87e1b 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt @@ -39,7 +39,7 @@ class TimelineItemGrouperTest { id = "0", senderId = A_USER_ID, senderAvatar = anAvatarData(), - senderDisplayName = "", + senderDisambiguatedDisplayName = "", content = TimelineItemStateEventContent(body = "a state event"), reactionsState = aTimelineItemReactions(count = 0), readReceiptState = TimelineItemReadReceipts(emptyList().toImmutableList()), diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt index bf287341ad..86355f82dc 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt @@ -27,6 +27,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageTy 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.permalink.FakePermalinkParser +import io.element.android.libraries.matrix.test.timeline.aProfileTimelineDetails import org.junit.Test class InReplyToDetailTest { @@ -54,8 +55,7 @@ class InReplyToDetailTest { val inReplyTo = InReplyTo.Ready( eventId = AN_EVENT_ID, senderId = A_USER_ID, - senderDisplayName = "senderDisplayName", - senderAvatarUrl = "senderAvatarUrl", + senderProfile = aProfileTimelineDetails(), content = RoomMembershipContent( userId = A_USER_ID, change = MembershipChange.INVITED, @@ -73,8 +73,7 @@ class InReplyToDetailTest { val inReplyTo = InReplyTo.Ready( eventId = AN_EVENT_ID, senderId = A_USER_ID, - senderDisplayName = "senderDisplayName", - senderAvatarUrl = "senderAvatarUrl", + senderProfile = aProfileTimelineDetails(), content = MessageContent( body = "**Hello!**", inReplyTo = null, @@ -101,8 +100,7 @@ class InReplyToDetailTest { val inReplyTo = InReplyTo.Ready( eventId = AN_EVENT_ID, senderId = A_USER_ID, - senderDisplayName = "senderDisplayName", - senderAvatarUrl = "senderAvatarUrl", + senderProfile = aProfileTimelineDetails(), content = MessageContent( body = "**Hello!**", inReplyTo = null, diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt index 53a0a0eec3..dc91de52b0 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt @@ -42,6 +42,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.ImageMessageT import io.element.android.libraries.matrix.api.timeline.item.event.LocationMessageType import io.element.android.libraries.matrix.api.timeline.item.event.OtherState import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent +import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent import io.element.android.libraries.matrix.api.timeline.item.event.StateContent @@ -55,6 +56,7 @@ import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.media.aMediaSource import io.element.android.libraries.matrix.test.timeline.aMessageContent import io.element.android.libraries.matrix.test.timeline.aPollContent +import io.element.android.libraries.matrix.test.timeline.aProfileTimelineDetails import io.element.android.libraries.matrix.ui.components.A_BLUR_HASH import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailInfo import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailType @@ -430,15 +432,13 @@ class InReplyToMetadataKtTest { fun anInReplyToDetails( eventId: EventId = AN_EVENT_ID, senderId: UserId = A_USER_ID, - senderDisplayName: String? = "senderDisplayName", - senderAvatarUrl: String? = "senderAvatarUrl", + senderProfile: ProfileTimelineDetails = aProfileTimelineDetails(), eventContent: EventContent? = aMessageContent(), textContent: String? = "textContent", ) = InReplyToDetails( eventId = eventId, senderId = senderId, - senderDisplayName = senderDisplayName, - senderAvatarUrl = senderAvatarUrl, + senderProfile = senderProfile, eventContent = eventContent, textContent = textContent, ) diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt index ffaabb45ea..f541941818 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt @@ -41,7 +41,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessage import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent -import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent import io.element.android.libraries.matrix.api.timeline.item.event.StateContent @@ -52,6 +51,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecry import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import io.element.android.libraries.matrix.ui.messages.toPlainText import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider @@ -72,15 +72,13 @@ class DefaultRoomLastMessageFormatter @Inject constructor( override fun format(event: EventTimelineItem, isDmRoom: Boolean): CharSequence? { val isOutgoing = event.isOwn - // Note: we do not use disambiguated display name here, see - // https://github.com/element-hq/element-x-ios/issues/1845#issuecomment-1888707428 - val senderDisplayName = (event.senderProfile as? ProfileTimelineDetails.Ready)?.displayName ?: event.sender.value + val senderDisambiguatedDisplayName = event.senderProfile.getDisambiguatedDisplayName(event.sender) return when (val content = event.content) { - is MessageContent -> processMessageContents(content, senderDisplayName, isDmRoom) + is MessageContent -> processMessageContents(content, senderDisambiguatedDisplayName, isDmRoom) RedactedContent -> { val message = sp.getString(CommonStrings.common_message_removed) if (!isDmRoom) { - prefix(message, senderDisplayName) + prefix(message, senderDisambiguatedDisplayName) } else { message } @@ -91,36 +89,40 @@ class DefaultRoomLastMessageFormatter @Inject constructor( is UnableToDecryptContent -> { val message = sp.getString(CommonStrings.common_waiting_for_decryption_key) if (!isDmRoom) { - prefix(message, senderDisplayName) + prefix(message, senderDisambiguatedDisplayName) } else { message } } is RoomMembershipContent -> { - roomMembershipContentFormatter.format(content, senderDisplayName, isOutgoing) + roomMembershipContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing) } is ProfileChangeContent -> { - profileChangeContentFormatter.format(content, event.sender, senderDisplayName, isOutgoing) + profileChangeContentFormatter.format(content, event.sender, senderDisambiguatedDisplayName, isOutgoing) } is StateContent -> { - stateContentFormatter.format(content, senderDisplayName, isOutgoing, RenderingMode.RoomList) + stateContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing, RenderingMode.RoomList) } is PollContent -> { val message = sp.getString(CommonStrings.common_poll_summary, content.question) - prefixIfNeeded(message, senderDisplayName, isDmRoom) + prefixIfNeeded(message, senderDisambiguatedDisplayName, isDmRoom) } is FailedToParseMessageLikeContent, is FailedToParseStateContent, is UnknownContent -> { - prefixIfNeeded(sp.getString(CommonStrings.common_unsupported_event), senderDisplayName, isDmRoom) + prefixIfNeeded(sp.getString(CommonStrings.common_unsupported_event), senderDisambiguatedDisplayName, isDmRoom) } is LegacyCallInviteContent -> sp.getString(CommonStrings.common_call_invite) }?.take(MAX_SAFE_LENGTH) } - private fun processMessageContents(messageContent: MessageContent, senderDisplayName: String, isDmRoom: Boolean): CharSequence? { + private fun processMessageContents( + messageContent: MessageContent, + senderDisambiguatedDisplayName: String, + isDmRoom: Boolean, + ): CharSequence { val internalMessage = when (val messageType: MessageType = messageContent.type) { // Doesn't need a prefix is EmoteMessageType -> { - return "* $senderDisplayName ${messageType.body}" + return "* $senderDisambiguatedDisplayName ${messageType.body}" } is TextMessageType -> { messageType.toPlainText(permalinkParser) @@ -153,19 +155,23 @@ class DefaultRoomLastMessageFormatter @Inject constructor( messageType.body } } - return prefixIfNeeded(internalMessage, senderDisplayName, isDmRoom) + return prefixIfNeeded(internalMessage, senderDisambiguatedDisplayName, isDmRoom) } - private fun prefixIfNeeded(message: String, senderDisplayName: String, isDmRoom: Boolean): CharSequence = if (isDmRoom) { + private fun prefixIfNeeded( + message: String, + senderDisambiguatedDisplayName: String, + isDmRoom: Boolean, + ): CharSequence = if (isDmRoom) { message } else { - prefix(message, senderDisplayName) + prefix(message, senderDisambiguatedDisplayName) } - private fun prefix(message: String, senderDisplayName: String): AnnotatedString { + private fun prefix(message: String, senderDisambiguatedDisplayName: String): AnnotatedString { return buildAnnotatedString { withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { - append(senderDisplayName) + append(senderDisambiguatedDisplayName) } append(": ") append(message) diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt index a4f0d25af0..e77659a99e 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt @@ -49,16 +49,16 @@ class DefaultTimelineEventFormatter @Inject constructor( ) : TimelineEventFormatter { override fun format(event: EventTimelineItem): CharSequence? { val isOutgoing = event.isOwn - val senderDisplayName = event.senderProfile.getDisambiguatedDisplayName(event.sender) + val senderDisambiguatedDisplayName = event.senderProfile.getDisambiguatedDisplayName(event.sender) return when (val content = event.content) { is RoomMembershipContent -> { - roomMembershipContentFormatter.format(content, senderDisplayName, isOutgoing) + roomMembershipContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing) } is ProfileChangeContent -> { - profileChangeContentFormatter.format(content, event.sender, senderDisplayName, isOutgoing) + profileChangeContentFormatter.format(content, event.sender, senderDisambiguatedDisplayName, isOutgoing) } is StateContent -> { - stateContentFormatter.format(content, senderDisplayName, isOutgoing, RenderingMode.Timeline) + stateContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing, RenderingMode.Timeline) } is LegacyCallInviteContent -> { sp.getString(CommonStrings.common_call_invite) diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt index 1b27c4ec15..c5d8a5fab6 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt @@ -27,14 +27,19 @@ class ProfileChangeContentFormatter @Inject constructor( fun format( profileChangeContent: ProfileChangeContent, senderId: UserId, - senderDisplayName: String, + senderDisambiguatedDisplayName: String, senderIsYou: Boolean, ): String? = profileChangeContent.run { val displayNameChanged = displayName != prevDisplayName val avatarChanged = avatarUrl != prevAvatarUrl return when { avatarChanged && displayNameChanged -> { - val message = format(profileChangeContent.copy(avatarUrl = null, prevAvatarUrl = null), senderId, senderDisplayName, senderIsYou) + val message = format( + profileChangeContent = profileChangeContent.copy(avatarUrl = null, prevAvatarUrl = null), + senderId = senderId, + senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, + senderIsYou = senderIsYou, + ) val avatarChangedToo = sp.getString(R.string.state_event_avatar_changed_too) "$message\n$avatarChangedToo" } @@ -63,7 +68,7 @@ class ProfileChangeContentFormatter @Inject constructor( if (senderIsYou) { sp.getString(R.string.state_event_avatar_url_changed_by_you) } else { - sp.getString(R.string.state_event_avatar_url_changed, senderDisplayName) + sp.getString(R.string.state_event_avatar_url_changed, senderDisambiguatedDisplayName) } } else -> null diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt index 926648458f..b4469fe886 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt @@ -29,7 +29,7 @@ class RoomMembershipContentFormatter @Inject constructor( ) { fun format( membershipContent: RoomMembershipContent, - senderDisplayName: String, + senderDisambiguatedDisplayName: String, senderIsYou: Boolean, ): CharSequence? { val userId = membershipContent.userId @@ -48,24 +48,24 @@ class RoomMembershipContentFormatter @Inject constructor( MembershipChange.BANNED, MembershipChange.KICKED_AND_BANNED -> if (senderIsYou) { sp.getString(R.string.state_event_room_ban_by_you, userId.value) } else { - sp.getString(R.string.state_event_room_ban, senderDisplayName, userId.value) + sp.getString(R.string.state_event_room_ban, senderDisambiguatedDisplayName, userId.value) } MembershipChange.UNBANNED -> if (senderIsYou) { sp.getString(R.string.state_event_room_unban_by_you, userId.value) } else { - sp.getString(R.string.state_event_room_unban, senderDisplayName, userId.value) + sp.getString(R.string.state_event_room_unban, senderDisambiguatedDisplayName, userId.value) } MembershipChange.KICKED -> if (senderIsYou) { sp.getString(R.string.state_event_room_remove_by_you, userId.value) } else { - sp.getString(R.string.state_event_room_remove, senderDisplayName, userId.value) + sp.getString(R.string.state_event_room_remove, senderDisambiguatedDisplayName, userId.value) } MembershipChange.INVITED -> if (senderIsYou) { sp.getString(R.string.state_event_room_invite_by_you, userId.value) } else if (memberIsYou) { - sp.getString(R.string.state_event_room_invite_you, senderDisplayName) + sp.getString(R.string.state_event_room_invite_you, senderDisambiguatedDisplayName) } else { - sp.getString(R.string.state_event_room_invite, senderDisplayName, userId.value) + sp.getString(R.string.state_event_room_invite, senderDisambiguatedDisplayName, userId.value) } MembershipChange.INVITATION_ACCEPTED -> if (memberIsYou) { sp.getString(R.string.state_event_room_invite_accepted_by_you) @@ -80,7 +80,7 @@ class RoomMembershipContentFormatter @Inject constructor( MembershipChange.INVITATION_REVOKED -> if (senderIsYou) { sp.getString(R.string.state_event_room_third_party_revoked_invite_by_you, userId.value) } else { - sp.getString(R.string.state_event_room_third_party_revoked_invite, senderDisplayName, userId.value) + sp.getString(R.string.state_event_room_third_party_revoked_invite, senderDisambiguatedDisplayName, userId.value) } MembershipChange.KNOCKED -> if (memberIsYou) { sp.getString(R.string.state_event_room_knock_by_you) @@ -90,7 +90,7 @@ class RoomMembershipContentFormatter @Inject constructor( MembershipChange.KNOCK_ACCEPTED -> if (senderIsYou) { sp.getString(R.string.state_event_room_knock_accepted_by_you, userId.value) } else { - sp.getString(R.string.state_event_room_knock_accepted, senderDisplayName, userId.value) + sp.getString(R.string.state_event_room_knock_accepted, senderDisambiguatedDisplayName, userId.value) } MembershipChange.KNOCK_RETRACTED -> if (memberIsYou) { sp.getString(R.string.state_event_room_knock_retracted_by_you) @@ -100,14 +100,14 @@ class RoomMembershipContentFormatter @Inject constructor( MembershipChange.KNOCK_DENIED -> if (senderIsYou) { sp.getString(R.string.state_event_room_knock_denied_by_you, userId.value) } else if (memberIsYou) { - sp.getString(R.string.state_event_room_knock_denied_you, senderDisplayName) + sp.getString(R.string.state_event_room_knock_denied_you, senderDisambiguatedDisplayName) } else { - sp.getString(R.string.state_event_room_knock_denied, senderDisplayName, userId.value) + sp.getString(R.string.state_event_room_knock_denied, senderDisambiguatedDisplayName, userId.value) } MembershipChange.NONE -> if (senderIsYou) { sp.getString(R.string.state_event_room_none_by_you) } else { - sp.getString(R.string.state_event_room_none, senderDisplayName) + sp.getString(R.string.state_event_room_none, senderDisambiguatedDisplayName) } MembershipChange.ERROR -> { Timber.v("Filtering timeline item for room membership: $membershipContent") diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt index 2e86648f7b..ef15216a66 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt @@ -29,7 +29,7 @@ class StateContentFormatter @Inject constructor( ) { fun format( stateContent: StateContent, - senderDisplayName: String, + senderDisambiguatedDisplayName: String, senderIsYou: Boolean, renderingMode: RenderingMode, ): CharSequence? { @@ -39,15 +39,15 @@ class StateContentFormatter @Inject constructor( when { senderIsYou && hasAvatarUrl -> sp.getString(R.string.state_event_room_avatar_changed_by_you) senderIsYou && !hasAvatarUrl -> sp.getString(R.string.state_event_room_avatar_removed_by_you) - !senderIsYou && hasAvatarUrl -> sp.getString(R.string.state_event_room_avatar_changed, senderDisplayName) - else -> sp.getString(R.string.state_event_room_avatar_removed, senderDisplayName) + !senderIsYou && hasAvatarUrl -> sp.getString(R.string.state_event_room_avatar_changed, senderDisambiguatedDisplayName) + else -> sp.getString(R.string.state_event_room_avatar_removed, senderDisambiguatedDisplayName) } } is OtherState.RoomCreate -> { if (senderIsYou) { sp.getString(R.string.state_event_room_created_by_you) } else { - sp.getString(R.string.state_event_room_created, senderDisplayName) + sp.getString(R.string.state_event_room_created, senderDisambiguatedDisplayName) } } is OtherState.RoomEncryption -> sp.getString(CommonStrings.common_encryption_enabled) @@ -56,8 +56,8 @@ class StateContentFormatter @Inject constructor( when { senderIsYou && hasRoomName -> sp.getString(R.string.state_event_room_name_changed_by_you, content.name) senderIsYou && !hasRoomName -> sp.getString(R.string.state_event_room_name_removed_by_you) - !senderIsYou && hasRoomName -> sp.getString(R.string.state_event_room_name_changed, senderDisplayName, content.name) - else -> sp.getString(R.string.state_event_room_name_removed, senderDisplayName) + !senderIsYou && hasRoomName -> sp.getString(R.string.state_event_room_name_changed, senderDisambiguatedDisplayName, content.name) + else -> sp.getString(R.string.state_event_room_name_removed, senderDisambiguatedDisplayName) } } is OtherState.RoomThirdPartyInvite -> { @@ -68,7 +68,7 @@ class StateContentFormatter @Inject constructor( if (senderIsYou) { sp.getString(R.string.state_event_room_third_party_invite_by_you, content.displayName) } else { - sp.getString(R.string.state_event_room_third_party_invite, senderDisplayName, content.displayName) + sp.getString(R.string.state_event_room_third_party_invite, senderDisambiguatedDisplayName, content.displayName) } } is OtherState.RoomTopic -> { @@ -76,8 +76,8 @@ class StateContentFormatter @Inject constructor( when { senderIsYou && hasRoomTopic -> sp.getString(R.string.state_event_room_topic_changed_by_you, content.topic) senderIsYou && !hasRoomTopic -> sp.getString(R.string.state_event_room_topic_removed_by_you) - !senderIsYou && hasRoomTopic -> sp.getString(R.string.state_event_room_topic_changed, senderDisplayName, content.topic) - else -> sp.getString(R.string.state_event_room_topic_removed, senderDisplayName) + !senderIsYou && hasRoomTopic -> sp.getString(R.string.state_event_room_topic_changed, senderDisambiguatedDisplayName, content.topic) + else -> sp.getString(R.string.state_event_room_topic_removed, senderDisambiguatedDisplayName) } } is OtherState.Custom -> when (renderingMode) { diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt index 39c8709a99..9df9698eec 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt @@ -27,7 +27,7 @@ data class NotificationData( val roomId: RoomId, // mxc url val senderAvatarUrl: String?, - // private, must use `getSenderName` + // private, must use `getDisambiguatedDisplayName` private val senderDisplayName: String?, private val senderIsNameAmbiguous: Boolean, val roomAvatarUrl: String?, @@ -39,7 +39,7 @@ data class NotificationData( val content: NotificationContent, val hasMention: Boolean, ) { - fun getSenderName(userId: UserId): String = when { + fun getDisambiguatedDisplayName(userId: UserId): String = when { senderDisplayName.isNullOrBlank() -> userId.value senderIsNameAmbiguous -> "$senderDisplayName ($userId)" else -> senderDisplayName @@ -52,6 +52,7 @@ sealed interface NotificationContent { data class CallInvite( val senderId: UserId, ) : MessageLike + data object CallHangup : MessageLike data object CallCandidates : MessageLike data object KeyVerificationReady : MessageLike diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/InReplyTo.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/InReplyTo.kt index 6965ed9f1e..1337491ff8 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/InReplyTo.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/InReplyTo.kt @@ -33,8 +33,7 @@ sealed interface InReplyTo { val eventId: EventId, val content: EventContent, val senderId: UserId, - val senderDisplayName: String?, - val senderAvatarUrl: String?, + val senderProfile: ProfileTimelineDetails, ) : InReplyTo /** diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt index d30125dbb7..d3a9294cc2 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt @@ -35,7 +35,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageT import io.element.android.libraries.matrix.impl.media.map import org.matrix.rustcomponents.sdk.Message import org.matrix.rustcomponents.sdk.MessageType -import org.matrix.rustcomponents.sdk.ProfileDetails import org.matrix.rustcomponents.sdk.RepliedToEventDetails import org.matrix.rustcomponents.sdk.use import org.matrix.rustcomponents.sdk.FormattedBody as RustFormattedBody @@ -51,13 +50,11 @@ class EventMessageMapper { val inReplyToId = EventId(details.eventId) when (val event = details.event) { is RepliedToEventDetails.Ready -> { - val senderProfile = event.senderProfile as? ProfileDetails.Ready InReplyTo.Ready( eventId = inReplyToId, content = timelineEventContentMapper.map(event.content), senderId = UserId(event.sender), - senderDisplayName = senderProfile?.displayName, - senderAvatarUrl = senderProfile?.avatarUrl, + senderProfile = event.senderProfile.map(), ) } is RepliedToEventDetails.Error -> InReplyTo.Error diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt index 8a285e3b32..edc773b89b 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt @@ -93,8 +93,8 @@ class NotifiableEventResolver @Inject constructor( ): NotifiableEvent? { return when (val content = this.content) { is NotificationContent.MessageLike.RoomMessage -> { - val senderName = getSenderName(content.senderId) - val messageBody = descriptionFromMessageContent(content, senderName) + val senderDisambiguatedDisplayName = getDisambiguatedDisplayName(content.senderId) + val messageBody = descriptionFromMessageContent(content, senderDisambiguatedDisplayName) val notificationBody = if (hasMention) { stringProvider.getString(R.string.notification_mentioned_you_body, messageBody) } else { @@ -107,7 +107,7 @@ class NotifiableEventResolver @Inject constructor( eventId = eventId, noisy = isNoisy, timestamp = this.timestamp, - senderName = senderName, + senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, body = notificationBody, imageUriString = fetchImageIfPresent(client)?.toString(), roomName = roomDisplayName, @@ -154,7 +154,7 @@ class NotifiableEventResolver @Inject constructor( eventId = eventId, noisy = isNoisy, timestamp = this.timestamp, - senderName = null, + senderDisambiguatedDisplayName = getDisambiguatedDisplayName(content.senderId), body = stringProvider.getString(CommonStrings.common_call_invite), imageUriString = fetchImageIfPresent(client)?.toString(), roomName = roomDisplayName, @@ -180,7 +180,7 @@ class NotifiableEventResolver @Inject constructor( eventId = eventId, noisy = isNoisy, timestamp = this.timestamp, - senderName = getSenderName(content.senderId), + senderDisambiguatedDisplayName = getDisambiguatedDisplayName(content.senderId), body = stringProvider.getString(CommonStrings.common_poll_summary, content.question), imageUriString = null, roomName = roomDisplayName, @@ -244,12 +244,12 @@ class NotifiableEventResolver @Inject constructor( private fun descriptionFromMessageContent( content: NotificationContent.MessageLike.RoomMessage, - senderDisplayName: String, + senderDisambiguatedDisplayName: String, ): String { return when (val messageType = content.messageType) { is AudioMessageType -> messageType.body is VoiceMessageType -> stringProvider.getString(CommonStrings.common_voice_message) - is EmoteMessageType -> "* $senderDisplayName ${messageType.body}" + is EmoteMessageType -> "* $senderDisambiguatedDisplayName ${messageType.body}" is FileMessageType -> messageType.body is ImageMessageType -> messageType.body is StickerMessageType -> messageType.body @@ -310,7 +310,7 @@ private fun buildNotifiableMessageEvent( canBeReplaced: Boolean = false, noisy: Boolean, timestamp: Long, - senderName: String?, + senderDisambiguatedDisplayName: String?, body: String?, // We cannot use Uri? type here, as that could trigger a // NotSerializableException when persisting this to storage @@ -335,7 +335,7 @@ private fun buildNotifiableMessageEvent( canBeReplaced = canBeReplaced, noisy = noisy, timestamp = timestamp, - senderName = senderName, + senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, body = body, imageUriString = imageUriString, threadId = threadId, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt index 27c8875a0c..65930f7652 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt @@ -45,7 +45,7 @@ class RoomGroupMessageCreator @Inject constructor( imageLoader: ImageLoader, ): RoomNotification.Message { val lastKnownRoomEvent = events.last() - val roomName = lastKnownRoomEvent.roomName ?: lastKnownRoomEvent.senderName ?: "Room name (${roomId.value.take(8)}…)" + val roomName = lastKnownRoomEvent.roomName ?: lastKnownRoomEvent.senderDisambiguatedDisplayName ?: "Room name (${roomId.value.take(8)}…)" val roomIsGroup = !lastKnownRoomEvent.roomIsDirect val style = NotificationCompat.MessagingStyle( Person.Builder() @@ -60,9 +60,9 @@ class RoomGroupMessageCreator @Inject constructor( } val tickerText = if (roomIsGroup) { - stringProvider.getString(R.string.notification_ticker_text_group, roomName, events.last().senderName, events.last().description) + stringProvider.getString(R.string.notification_ticker_text_group, roomName, events.last().senderDisambiguatedDisplayName, events.last().description) } else { - stringProvider.getString(R.string.notification_ticker_text_dm, events.last().senderName, events.last().description) + stringProvider.getString(R.string.notification_ticker_text_dm, events.last().senderDisambiguatedDisplayName, events.last().description) } val largeBitmap = getRoomBitmap(events, imageLoader) @@ -108,7 +108,7 @@ class RoomGroupMessageCreator @Inject constructor( null } else { Person.Builder() - .setName(event.senderName?.annotateForDebug(70)) + .setName(event.senderDisambiguatedDisplayName?.annotateForDebug(70)) .setIcon(bitmapLoader.getUserIcon(event.senderAvatarPath, imageLoader)) .setKey(event.senderId.value) .build() @@ -152,7 +152,7 @@ class RoomGroupMessageCreator @Inject constructor( private fun createFirstMessageSummaryLine(event: NotifiableMessageEvent, roomName: String, roomIsDirect: Boolean): CharSequence { return if (roomIsDirect) { buildSpannedString { - event.senderName?.let { + event.senderDisambiguatedDisplayName?.let { inSpans(StyleSpan(Typeface.BOLD)) { append(it) append(": ") @@ -165,7 +165,7 @@ class RoomGroupMessageCreator @Inject constructor( inSpans(StyleSpan(Typeface.BOLD)) { append(roomName) append(": ") - event.senderName?.let { + event.senderDisambiguatedDisplayName?.let { append(it) append(" ") } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/model/NotifiableMessageEvent.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/model/NotifiableMessageEvent.kt index cd972e31b1..015e24d5e6 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/model/NotifiableMessageEvent.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/model/NotifiableMessageEvent.kt @@ -36,7 +36,7 @@ data class NotifiableMessageEvent( val senderId: UserId, val noisy: Boolean, val timestamp: Long, - val senderName: String?, + val senderDisambiguatedDisplayName: String?, val body: String?, // We cannot use Uri? type here, as that could trigger a // NotSerializableException when persisting this to storage @@ -55,7 +55,6 @@ data class NotifiableMessageEvent( ) : NotifiableEvent { val type: String = EventType.MESSAGE override val description: String = body ?: "" - val title: String = senderName ?: "" // Example of value: // content://io.element.android.x.debug.notifications.fileprovider/downloads/temp/notif/matrix.org/XGItzSDOnSyXjYtOPfiKexDJ diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt index b2f954091e..6bac49983b 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt @@ -462,7 +462,7 @@ class NotifiableEventResolverTest { senderId = A_USER_ID_2, noisy = false, timestamp = A_TIMESTAMP, - senderName = null, + senderDisambiguatedDisplayName = null, body = "Call in progress (unsupported)", imageUriString = null, threadId = null, @@ -586,7 +586,7 @@ class NotifiableEventResolverTest { senderId = A_USER_ID_2, noisy = false, timestamp = A_TIMESTAMP, - senderName = "Bob", + senderDisambiguatedDisplayName = "Bob", body = body, imageUriString = null, threadId = null, diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/fixtures/NotifiableEventFixture.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/fixtures/NotifiableEventFixture.kt index 44a2873465..096ae254b8 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/fixtures/NotifiableEventFixture.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/fixtures/NotifiableEventFixture.kt @@ -85,7 +85,7 @@ fun aNotifiableMessageEvent( editedEventId = null, noisy = false, timestamp = timestamp, - senderName = "sender-name", + senderDisambiguatedDisplayName = "sender-name", senderId = UserId("@sending-id:domain.com"), body = "message-body", roomId = roomId, From 461f14458568a912b5c64c90a04f20db56f4358b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 11:50:53 +0200 Subject: [PATCH 111/289] Use `aProfileTimelineDetails()` --- .../impl/DefaultRoomLastMessageFormatterTest.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt index 158eeec20d..8fffaaa28f 100644 --- a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt +++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt @@ -38,7 +38,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MessageType import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType import io.element.android.libraries.matrix.api.timeline.item.event.OtherState -import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent import io.element.android.libraries.matrix.api.timeline.item.event.StateContent @@ -54,6 +53,7 @@ import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser import io.element.android.libraries.matrix.test.timeline.aPollContent import io.element.android.libraries.matrix.test.timeline.aProfileChangeMessageContent +import io.element.android.libraries.matrix.test.timeline.aProfileTimelineDetails import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem import io.element.android.services.toolbox.impl.strings.AndroidStringProvider import org.junit.Before @@ -829,9 +829,13 @@ class DefaultRoomLastMessageFormatterTest { // endregion - private fun createRoomEvent(sentByYou: Boolean, senderDisplayName: String?, content: EventContent): EventTimelineItem { + private fun createRoomEvent( + sentByYou: Boolean, + senderDisplayName: String?, + content: EventContent, + ): EventTimelineItem { val sender = if (sentByYou) A_USER_ID else someoneElseId - val profile = ProfileTimelineDetails.Ready(senderDisplayName, false, null) + val profile = aProfileTimelineDetails(senderDisplayName) return anEventTimelineItem( content = content, senderProfile = profile, From 1d6b479d38b95dedf318be38a7239c8c708ae284 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 12:35:46 +0200 Subject: [PATCH 112/289] Use display name in state event rendering #2722 --- .../eventformatter/impl/RoomMembershipContentFormatter.kt | 8 ++++---- .../impl/DefaultRoomLastMessageFormatterTest.kt | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt index b4469fe886..1c58cffd43 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt @@ -38,12 +38,12 @@ class RoomMembershipContentFormatter @Inject constructor( MembershipChange.JOINED -> if (memberIsYou) { sp.getString(R.string.state_event_room_join_by_you) } else { - sp.getString(R.string.state_event_room_join, userId.value) + sp.getString(R.string.state_event_room_join, senderDisambiguatedDisplayName) } MembershipChange.LEFT -> if (memberIsYou) { sp.getString(R.string.state_event_room_leave_by_you) } else { - sp.getString(R.string.state_event_room_leave, userId.value) + sp.getString(R.string.state_event_room_leave, senderDisambiguatedDisplayName) } MembershipChange.BANNED, MembershipChange.KICKED_AND_BANNED -> if (senderIsYou) { sp.getString(R.string.state_event_room_ban_by_you, userId.value) @@ -85,7 +85,7 @@ class RoomMembershipContentFormatter @Inject constructor( MembershipChange.KNOCKED -> if (memberIsYou) { sp.getString(R.string.state_event_room_knock_by_you) } else { - sp.getString(R.string.state_event_room_knock, userId.value) + sp.getString(R.string.state_event_room_knock, senderDisambiguatedDisplayName) } MembershipChange.KNOCK_ACCEPTED -> if (senderIsYou) { sp.getString(R.string.state_event_room_knock_accepted_by_you, userId.value) @@ -95,7 +95,7 @@ class RoomMembershipContentFormatter @Inject constructor( MembershipChange.KNOCK_RETRACTED -> if (memberIsYou) { sp.getString(R.string.state_event_room_knock_retracted_by_you) } else { - sp.getString(R.string.state_event_room_knock_retracted, userId.value) + sp.getString(R.string.state_event_room_knock_retracted, senderDisambiguatedDisplayName) } MembershipChange.KNOCK_DENIED -> if (senderIsYou) { sp.getString(R.string.state_event_room_knock_denied_by_you, userId.value) diff --git a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt index 8fffaaa28f..f2000442eb 100644 --- a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt +++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt @@ -264,7 +264,7 @@ class DefaultRoomLastMessageFormatterTest { val someoneJoinedRoomEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent) val someoneJoinedRoom = formatter.format(someoneJoinedRoomEvent, false) - assertThat(someoneJoinedRoom).isEqualTo("${someoneContent.userId} joined the room") + assertThat(someoneJoinedRoom).isEqualTo("$otherName joined the room") } @Test @@ -280,7 +280,7 @@ class DefaultRoomLastMessageFormatterTest { val someoneLeftRoomEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent) val someoneLeftRoom = formatter.format(someoneLeftRoomEvent, false) - assertThat(someoneLeftRoom).isEqualTo("${someoneContent.userId} left the room") + assertThat(someoneLeftRoom).isEqualTo("$otherName left the room") } @Test @@ -421,7 +421,7 @@ class DefaultRoomLastMessageFormatterTest { val someoneKnockedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent) val someoneKnocked = formatter.format(someoneKnockedEvent, false) - assertThat(someoneKnocked).isEqualTo("${someoneContent.userId} requested to join") + assertThat(someoneKnocked).isEqualTo("$otherName requested to join") } @Test @@ -452,7 +452,7 @@ class DefaultRoomLastMessageFormatterTest { val someoneRetractedKnockEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent) val someoneRetractedKnock = formatter.format(someoneRetractedKnockEvent, false) - assertThat(someoneRetractedKnock).isEqualTo("${someoneContent.userId} is no longer interested in joining") + assertThat(someoneRetractedKnock).isEqualTo("$otherName is no longer interested in joining") } @Test From ac9689fae9ce5d71499ef4bfef499d77a70d4675 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 12:42:35 +0200 Subject: [PATCH 113/289] Fix test compilation issue. --- .../matrix/api/notification/NotificationDataTest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/notification/NotificationDataTest.kt b/libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/notification/NotificationDataTest.kt index 77a4188a68..0bd661637c 100644 --- a/libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/notification/NotificationDataTest.kt +++ b/libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/notification/NotificationDataTest.kt @@ -29,7 +29,7 @@ class NotificationDataTest { senderDisplayName = null, senderIsNameAmbiguous = false, ) - assertThat(sut.getSenderName(A_USER_ID)).isEqualTo("@alice:server.org") + assertThat(sut.getDisambiguatedDisplayName(A_USER_ID)).isEqualTo("@alice:server.org") } @Test @@ -38,7 +38,7 @@ class NotificationDataTest { senderDisplayName = "Alice", senderIsNameAmbiguous = false, ) - assertThat(sut.getSenderName(A_USER_ID)).isEqualTo("Alice") + assertThat(sut.getDisambiguatedDisplayName(A_USER_ID)).isEqualTo("Alice") } @Test @@ -47,7 +47,7 @@ class NotificationDataTest { senderDisplayName = "Alice", senderIsNameAmbiguous = true, ) - assertThat(sut.getSenderName(A_USER_ID)).isEqualTo("Alice (@alice:server.org)") + assertThat(sut.getDisambiguatedDisplayName(A_USER_ID)).isEqualTo("Alice (@alice:server.org)") } private fun aNotificationData( From f9c8c8aa213f965cdac6368858b30124a07617ab Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 13:17:43 +0200 Subject: [PATCH 114/289] Fix test --- .../push/impl/notifications/NotifiableEventResolverTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt index 6bac49983b..d0cd5a30e5 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolverTest.kt @@ -462,7 +462,7 @@ class NotifiableEventResolverTest { senderId = A_USER_ID_2, noisy = false, timestamp = A_TIMESTAMP, - senderDisambiguatedDisplayName = null, + senderDisambiguatedDisplayName = "Bob", body = "Call in progress (unsupported)", imageUriString = null, threadId = null, From 8524e3626e83fdd0c886fe97b153395567a93de8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 13:56:44 +0200 Subject: [PATCH 115/289] Add Timeline item and reply preview with ambiguous display name --- ...imelineItemEventRowDisambiguatedPreview.kt | 47 +++++++++++++++++++ .../TimelineItemEventRowWithReplyPreview.kt | 5 +- 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowDisambiguatedPreview.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowDisambiguatedPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowDisambiguatedPreview.kt new file mode 100644 index 0000000000..019eb183b2 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowDisambiguatedPreview.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.PreviewParameter +import io.element.android.features.messages.impl.timeline.model.InReplyToDetails +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType + +@PreviewsDayNight +@Composable +internal fun TimelineItemEventRowDisambiguatedPreview( + @PreviewParameter(InReplyToDetailsDisambiguatedProvider::class) inReplyToDetails: InReplyToDetails, +) = ElementPreview { + TimelineItemEventRowWithReplyContentToPreview(inReplyToDetails) +} + +class InReplyToDetailsDisambiguatedProvider : InReplyToDetailsProvider() { + override val values: Sequence + get() = sequenceOf( + aMessageContent( + body = "Message which are being replied.", + type = TextMessageType("Message which are being replied.", null) + ), + ).map { + aInReplyToDetails( + displayNameAmbiguous = true, + eventContent = it, + ) + } +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt index ca81acbd72..61d16f3e35 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt @@ -151,7 +151,7 @@ open class InReplyToDetailsProvider : PreviewParameterProvider ) } - private fun aMessageContent( + protected fun aMessageContent( body: String, type: MessageType, ) = MessageContent( @@ -164,13 +164,14 @@ open class InReplyToDetailsProvider : PreviewParameterProvider protected fun aInReplyToDetails( eventContent: EventContent, + displayNameAmbiguous: Boolean = false, ) = InReplyToDetails( eventId = EventId("\$event"), eventContent = eventContent, senderId = UserId("@Sender:domain"), senderProfile = ProfileTimelineDetails.Ready( displayName = "Sender", - displayNameAmbiguous = false, + displayNameAmbiguous = displayNameAmbiguous, avatarUrl = null, ), textContent = (eventContent as? MessageContent)?.body.orEmpty(), From 237ba3d7278eba07f2195516aa58e16d1c61a592 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 15:47:49 +0200 Subject: [PATCH 116/289] Improve display name disambiguation rendering #2722 --- .../actionlist/ActionListStateProvider.kt | 8 +- .../impl/actionlist/ActionListView.kt | 48 +++---- .../messages/impl/sender/SenderName.kt | 134 ++++++++++++++++++ .../impl/sender/SenderNameDataProvider.kt | 57 ++++++++ .../messages/impl/sender/SenderNameMode.kt | 25 ++++ .../impl/timeline/TimelineStateProvider.kt | 9 +- .../components/TimelineItemEventRow.kt | 40 +++--- ...imelineItemEventRowDisambiguatedPreview.kt | 5 +- ...melineItemEventRowLongSenderNamePreview.kt | 2 +- .../TimelineItemEventRowTimestampPreview.kt | 1 - .../TimelineItemEventRowWithReplyPreview.kt | 21 ++- .../event/TimelineItemEventFactory.kt | 31 +--- .../impl/timeline/model/TimelineItem.kt | 6 +- .../item/event/ProfileTimelineDetails.kt | 7 + 14 files changed, 310 insertions(+), 84 deletions(-) create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderName.kt create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameMode.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListStateProvider.kt index be78037d76..48c44e38c9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListStateProvider.kt @@ -48,8 +48,11 @@ open class ActionListStateProvider : PreviewParameterProvider { ), anActionListState().copy( target = ActionListState.Target.Success( - event = aTimelineItemEvent(content = aTimelineItemImageContent()).copy( - reactionsState = reactionsState + event = aTimelineItemEvent( + content = aTimelineItemImageContent(), + displayNameAmbiguous = true, + ).copy( + reactionsState = reactionsState, ), displayEmojiReactions = true, actions = aTimelineItemActionList(), @@ -142,6 +145,7 @@ fun aTimelineItemActionList(): ImmutableList { TimelineItemAction.ViewSource, ) } + fun aTimelineItemPollActionList(): ImmutableList { return persistentListOf( TimelineItemAction.EndPoll, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt index 613fb9370f..6b7b611557 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt @@ -55,6 +55,8 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction +import io.element.android.features.messages.impl.sender.SenderName +import io.element.android.features.messages.impl.sender.SenderNameMode import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent @@ -143,8 +145,8 @@ fun ActionListView( onEmojiReactionClicked = ::onEmojiReactionClicked, onCustomReactionClicked = ::onCustomReactionClicked, modifier = Modifier - .navigationBarsPadding() - .imePadding() + .navigationBarsPadding() + .imePadding() ) } } @@ -175,8 +177,8 @@ private fun SheetContent( MessageSummary( event = target.event, modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp) + .fillMaxWidth() + .padding(horizontal = 16.dp) ) Spacer(modifier = Modifier.height(14.dp)) HorizontalDivider() @@ -268,15 +270,11 @@ private fun MessageSummary(event: TimelineItem.Event, modifier: Modifier = Modif icon() Spacer(modifier = Modifier.width(8.dp)) Column(modifier = Modifier.weight(1f)) { - Row { - if (event.senderDisambiguatedDisplayName != null) { - Text( - text = event.senderDisambiguatedDisplayName, - style = ElementTheme.typography.fontBodySmMedium, - color = MaterialTheme.colorScheme.primary - ) - } - } + SenderName( + senderId = event.senderId, + senderProfile = event.senderProfile, + senderNameMode = SenderNameMode.ActionList, + ) content() } Spacer(modifier = Modifier.width(16.dp)) @@ -324,13 +322,13 @@ private fun EmojiReactionsRow( contentDescription = stringResource(id = CommonStrings.a11y_react_with_other_emojis), tint = MaterialTheme.colorScheme.secondary, modifier = Modifier - .size(24.dp) - .clickable( - enabled = true, - onClick = onCustomReactionClicked, - indication = rememberRipple(bounded = false, radius = emojiRippleRadius), - interactionSource = remember { MutableInteractionSource() } - ) + .size(24.dp) + .clickable( + enabled = true, + onClick = onCustomReactionClicked, + indication = rememberRipple(bounded = false, radius = emojiRippleRadius), + interactionSource = remember { MutableInteractionSource() } + ) ) } } @@ -354,11 +352,11 @@ private fun EmojiButton( } Box( modifier = Modifier - .size(48.dp) - .background(backgroundColor, CircleShape) - .clearAndSetSemantics { - contentDescription = description - }, + .size(48.dp) + .background(backgroundColor, CircleShape) + .clearAndSetSemantics { + contentDescription = description + }, contentAlignment = Alignment.Center ) { Text( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderName.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderName.kt new file mode 100644 index 0000000000..5142c00bdf --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderName.kt @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.sender + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material3.MaterialTheme +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 +import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.preview.ElementPreview +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.ProfileTimelineDetails + +// https://www.figma.com/file/Ni6Ii8YKtmXCKYNE90cC67/Timeline-(new)?type=design&node-id=917-80169&mode=design&t=A0CJCBbMqR8NOwUQ-0 +@Composable +fun SenderName( + senderId: UserId, + senderProfile: ProfileTimelineDetails, + senderNameMode: SenderNameMode, + modifier: Modifier = Modifier, +) { + Row( + modifier = modifier, + horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + when (senderProfile) { + is ProfileTimelineDetails.Error, + ProfileTimelineDetails.Pending, + ProfileTimelineDetails.Unavailable -> { + MainText(text = senderId.value, mode = senderNameMode) + } + is ProfileTimelineDetails.Ready -> { + val displayName = senderProfile.displayName + if (displayName.isNullOrEmpty()) { + MainText(text = senderId.value, mode = senderNameMode) + } else { + MainText(text = displayName, mode = senderNameMode) + if (senderProfile.displayNameAmbiguous) { + SecondaryText(text = senderId.value, mode = senderNameMode) + } + } + } + } + } +} + +@Composable +private fun RowScope.MainText( + text: String, + mode: SenderNameMode, +) { + val style = when (mode) { + is SenderNameMode.Timeline -> ElementTheme.typography.fontBodyMdMedium + SenderNameMode.ActionList, + SenderNameMode.Reply -> ElementTheme.typography.fontBodySmMedium + } + val modifier = when (mode) { + is SenderNameMode.Timeline -> Modifier.alignByBaseline() + SenderNameMode.ActionList, + SenderNameMode.Reply -> Modifier + } + val color = when (mode) { + is SenderNameMode.Timeline -> mode.mainColor + SenderNameMode.ActionList, + SenderNameMode.Reply -> MaterialTheme.colorScheme.primary + } + Text( + modifier = modifier.clipToBounds(), + text = text, + style = style, + color = color, + overflow = TextOverflow.Ellipsis, + ) +} + +@Composable +private fun RowScope.SecondaryText( + text: String, + mode: SenderNameMode, +) { + val style = when (mode) { + is SenderNameMode.Timeline -> ElementTheme.typography.fontBodySmRegular + SenderNameMode.ActionList, + SenderNameMode.Reply -> ElementTheme.typography.fontBodyXsRegular + } + val modifier = when (mode) { + is SenderNameMode.Timeline -> Modifier.alignByBaseline() + SenderNameMode.ActionList, + SenderNameMode.Reply -> Modifier + } + Text( + modifier = modifier.clipToBounds(), + text = text, + style = style, + color = MaterialTheme.colorScheme.secondary, + overflow = TextOverflow.Ellipsis, + ) +} + +@PreviewsDayNight +@Composable +internal fun SenderNamePreview( + @PreviewParameter(SenderNameDataProvider::class) senderNameData: SenderNameData, +) = ElementPreview { + SenderName( + senderId = senderNameData.userId, + senderProfile = senderNameData.profileTimelineDetails, + senderNameMode = senderNameData.senderNameMode, + ) +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt new file mode 100644 index 0000000000..6498aa0bb4 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.sender + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.messages.impl.timeline.components.aProfileTimelineDetailsReady +import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails + +data class SenderNameData( + val userId: UserId, + val profileTimelineDetails: ProfileTimelineDetails, + val senderNameMode: SenderNameMode, +) + +open class SenderNameDataProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + SenderNameMode.Timeline(mainColor = Color.Red), + SenderNameMode.Reply, + SenderNameMode.ActionList, + ) + .flatMap { senderNameMode -> + sequenceOf( + aSenderNameData(senderNameMode = senderNameMode), + aSenderNameData(displayNameAmbiguous = true, senderNameMode = senderNameMode), + SenderNameData(UserId("@alice:${senderNameMode.javaClass.name.lowercase()}"), ProfileTimelineDetails.Unavailable, senderNameMode = senderNameMode), + ) + } +} + +fun aSenderNameData( + displayNameAmbiguous: Boolean = false, + senderNameMode: SenderNameMode, +) = SenderNameData( + userId = UserId("@alice:${senderNameMode.javaClass.name.lowercase()}"), + profileTimelineDetails = aProfileTimelineDetailsReady( + displayName = "Alice ${senderNameMode.javaClass.name}", + displayNameAmbiguous = displayNameAmbiguous, + ), + senderNameMode = senderNameMode, +) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameMode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameMode.kt new file mode 100644 index 0000000000..6b83480650 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameMode.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.sender + +import androidx.compose.ui.graphics.Color + +sealed interface SenderNameMode { + data class Timeline(val mainColor: Color) : SenderNameMode + data object Reply : SenderNameMode + data object ActionList : SenderNameMode +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index e9322a6087..f2d2d8624c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline +import io.element.android.features.messages.impl.timeline.components.aProfileTimelineDetailsReady import io.element.android.features.messages.impl.timeline.components.receipt.aReadReceiptData import io.element.android.features.messages.impl.timeline.model.InReplyToDetails import io.element.android.features.messages.impl.timeline.model.NewEventState @@ -130,7 +131,8 @@ internal fun aTimelineItemEvent( transactionId: TransactionId? = null, isMine: Boolean = false, isEditable: Boolean = false, - senderDisambiguatedDisplayName: String = "Sender", + senderDisplayName: String = "Sender", + displayNameAmbiguous: Boolean = false, content: TimelineItemEventContent = aTimelineItemTextContent(), groupPosition: TimelineItemGroupPosition = TimelineItemGroupPosition.None, sendState: LocalEventSendState? = null, @@ -152,7 +154,10 @@ internal fun aTimelineItemEvent( sentTime = "12:34", isMine = isMine, isEditable = isEditable, - senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, + senderProfile = aProfileTimelineDetailsReady( + displayName = senderDisplayName, + displayNameAmbiguous = displayNameAmbiguous, + ), groupPosition = groupPosition, localSendState = sendState, inReplyTo = inReplyTo, 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 d5cdd36dab..b5c60bb2af 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 @@ -69,6 +69,8 @@ import androidx.constraintlayout.compose.ConstrainScope import androidx.constraintlayout.compose.ConstraintLayout import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.features.messages.impl.sender.SenderName +import io.element.android.features.messages.impl.sender.SenderNameMode import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.TimelineRoomInfo import io.element.android.features.messages.impl.timeline.aTimelineItemEvent @@ -106,6 +108,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import io.element.android.libraries.matrix.ui.components.AttachmentThumbnail import io.element.android.libraries.testtags.TestTags @@ -292,7 +295,8 @@ private fun TimelineItemEventRowContent( val avatarStrokeSize = 3.dp if (event.showSenderInformation && !timelineRoomInfo.isDm) { MessageSenderInformation( - event.safeSenderName, + event.senderId, + event.senderProfile, event.senderAvatar, avatarStrokeSize, Modifier @@ -372,7 +376,8 @@ private fun TimelineItemEventRowContent( @Composable private fun MessageSenderInformation( - sender: String, + senderId: UserId, + senderProfile: ProfileTimelineDetails, senderAvatar: AvatarData, avatarStrokeSize: Dp, modifier: Modifier = Modifier @@ -399,13 +404,10 @@ private fun MessageSenderInformation( Row { Avatar(senderAvatar) Spacer(modifier = Modifier.width(4.dp)) - Text( - modifier = Modifier.clipToBounds(), - text = sender, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - color = avatarColors.foreground, - style = ElementTheme.typography.fontBodyMdMedium, + SenderName( + senderId = senderId, + senderProfile = senderProfile, + senderNameMode = SenderNameMode.Timeline(avatarColors.foreground), ) } } @@ -562,10 +564,10 @@ private fun MessageEventBubbleContent( } } val inReplyTo = @Composable { inReplyTo: InReplyToDetails -> - val senderDisambiguatedDisplayName = inReplyTo.senderProfile.getDisambiguatedDisplayName(inReplyTo.senderId) val topPadding = if (showThreadDecoration) 0.dp else 8.dp ReplyToContent( - senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, + senderId = inReplyTo.senderId, + senderProfile = inReplyTo.senderProfile, metadata = inReplyTo.metadata(), modifier = Modifier .padding(top = topPadding, start = 8.dp, end = 8.dp) @@ -610,7 +612,8 @@ private fun MessageEventBubbleContent( @Composable private fun ReplyToContent( - senderDisambiguatedDisplayName: String, + senderId: UserId, + senderProfile: ProfileTimelineDetails, metadata: InReplyToMetadata?, modifier: Modifier = Modifier, ) { @@ -634,18 +637,15 @@ private fun ReplyToContent( ) Spacer(modifier = Modifier.width(8.dp)) } - val a11InReplyToText = stringResource(CommonStrings.common_in_reply_to, senderDisambiguatedDisplayName) + val a11InReplyToText = stringResource(CommonStrings.common_in_reply_to, senderProfile.getDisambiguatedDisplayName(senderId)) Column(verticalArrangement = Arrangement.SpaceBetween) { - Text( + SenderName( + senderId = senderId, + senderProfile = senderProfile, + senderNameMode = SenderNameMode.Reply, modifier = Modifier.semantics { contentDescription = a11InReplyToText }, - text = senderDisambiguatedDisplayName, - style = ElementTheme.typography.fontBodySmMedium, - textAlign = TextAlign.Start, - color = ElementTheme.materialColors.primary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, ) ReplyToContentText(metadata) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowDisambiguatedPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowDisambiguatedPreview.kt index 019eb183b2..2527072c24 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowDisambiguatedPreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowDisambiguatedPreview.kt @@ -28,7 +28,10 @@ import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageTy internal fun TimelineItemEventRowDisambiguatedPreview( @PreviewParameter(InReplyToDetailsDisambiguatedProvider::class) inReplyToDetails: InReplyToDetails, ) = ElementPreview { - TimelineItemEventRowWithReplyContentToPreview(inReplyToDetails) + TimelineItemEventRowWithReplyContentToPreview( + inReplyToDetails = inReplyToDetails, + displayNameAmbiguous = true, + ) } class InReplyToDetailsDisambiguatedProvider : InReplyToDetailsProvider() { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowLongSenderNamePreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowLongSenderNamePreview.kt index c374d15709..061ad75690 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowLongSenderNamePreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowLongSenderNamePreview.kt @@ -27,7 +27,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreviewLight internal fun TimelineItemEventRowLongSenderNamePreview() = ElementPreviewLight { ATimelineItemEventRow( event = aTimelineItemEvent( - senderDisambiguatedDisplayName = "a long sender display name to test single line and ellipsis at the end of the line", + senderDisplayName = "a long sender display name to test single line and ellipsis at the end of the line", ), ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowTimestampPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowTimestampPreview.kt index b9bb881bb6..8ec1d0e554 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowTimestampPreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowTimestampPreview.kt @@ -43,7 +43,6 @@ internal fun TimelineItemEventRowTimestampPreview( body = str, ), reactionsState = aTimelineItemReactions(count = 0), - senderDisambiguatedDisplayName = "A sender", ), ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt index 61d16f3e35..8c59c3c07a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt @@ -59,7 +59,10 @@ internal fun TimelineItemEventRowWithReplyPreview( } @Composable -internal fun TimelineItemEventRowWithReplyContentToPreview(inReplyToDetails: InReplyToDetails) { +internal fun TimelineItemEventRowWithReplyContentToPreview( + inReplyToDetails: InReplyToDetails, + displayNameAmbiguous: Boolean = false, +) { Column { sequenceOf(false, true).forEach { ATimelineItemEventRow( @@ -70,6 +73,7 @@ internal fun TimelineItemEventRowWithReplyContentToPreview(inReplyToDetails: InR body = "A reply." ), inReplyTo = inReplyToDetails, + displayNameAmbiguous = displayNameAmbiguous, groupPosition = TimelineItemGroupPosition.First, ), ) @@ -81,6 +85,7 @@ internal fun TimelineItemEventRowWithReplyContentToPreview(inReplyToDetails: InR aspectRatio = 2.5f ), inReplyTo = inReplyToDetails, + displayNameAmbiguous = displayNameAmbiguous, isThreaded = true, groupPosition = TimelineItemGroupPosition.Last, ), @@ -169,11 +174,19 @@ open class InReplyToDetailsProvider : PreviewParameterProvider eventId = EventId("\$event"), eventContent = eventContent, senderId = UserId("@Sender:domain"), - senderProfile = ProfileTimelineDetails.Ready( - displayName = "Sender", + senderProfile = aProfileTimelineDetailsReady( displayNameAmbiguous = displayNameAmbiguous, - avatarUrl = null, ), textContent = (eventContent as? MessageContent)?.body.orEmpty(), ) } + +internal fun aProfileTimelineDetailsReady( + displayName: String? = "Sender", + displayNameAmbiguous: Boolean = false, + avatarUrl: String? = null, +) = ProfileTimelineDetails.Ready( + displayName = displayName, + displayNameAmbiguous = displayNameAmbiguous, + avatarUrl = avatarUrl, +) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt index 7945a88876..50550bd84f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt @@ -33,7 +33,7 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails +import io.element.android.libraries.matrix.api.timeline.item.event.getAvatarUrl import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import kotlinx.collections.immutable.toImmutableList import java.text.DateFormat @@ -55,15 +55,14 @@ class TimelineItemEventFactory @Inject constructor( val currentSender = currentTimelineItem.event.sender val groupPosition = computeGroupPosition(currentTimelineItem, timelineItems, index) - val (senderDisambiguatedDisplayName, senderAvatarUrl) = currentTimelineItem.getSenderInfo() - + val senderProfile = currentTimelineItem.event.senderProfile val timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT) val sentTime = timeFormatter.format(Date(currentTimelineItem.event.timestamp)) val senderAvatarData = AvatarData( id = currentSender.value, - name = senderDisambiguatedDisplayName ?: currentSender.value, - url = senderAvatarUrl, + name = senderProfile.getDisambiguatedDisplayName(currentSender), + url = senderProfile.getAvatarUrl(), size = AvatarSize.TimelineSender ) currentTimelineItem.event @@ -72,7 +71,7 @@ class TimelineItemEventFactory @Inject constructor( eventId = currentTimelineItem.eventId, transactionId = currentTimelineItem.transactionId, senderId = currentSender, - senderDisambiguatedDisplayName = senderDisambiguatedDisplayName, + senderProfile = senderProfile, senderAvatar = senderAvatarData, content = contentFactory.create(currentTimelineItem.event), isMine = currentTimelineItem.event.isOwn, @@ -99,26 +98,6 @@ class TimelineItemEventFactory @Inject constructor( ) } - private fun MatrixTimelineItem.Event.getSenderInfo(): Pair { - val senderDisambiguatedDisplayName: String? - val senderAvatarUrl: String? - - when (val senderProfile = event.senderProfile) { - ProfileTimelineDetails.Unavailable, - ProfileTimelineDetails.Pending, - is ProfileTimelineDetails.Error -> { - senderDisambiguatedDisplayName = null - senderAvatarUrl = null - } - is ProfileTimelineDetails.Ready -> { - senderDisambiguatedDisplayName = senderProfile.getDisambiguatedDisplayName(event.sender) - senderAvatarUrl = senderProfile.avatarUrl - } - } - - return senderDisambiguatedDisplayName to senderAvatarUrl - } - private fun MatrixTimelineItem.Event.computeReactionsState(): TimelineItemReactions { val timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT) var aggregatedReactions = event.reactions.map { reaction -> diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt index aa21702e35..c42869af7a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt @@ -27,7 +27,9 @@ import io.element.android.libraries.matrix.api.core.TransactionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState +import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemEventOrigin +import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import kotlinx.collections.immutable.ImmutableList @Immutable @@ -57,7 +59,7 @@ sealed interface TimelineItem { val eventId: EventId? = null, val transactionId: TransactionId? = null, val senderId: UserId, - val senderDisambiguatedDisplayName: String?, + val senderProfile: ProfileTimelineDetails, val senderAvatar: AvatarData, val content: TimelineItemEventContent, val sentTime: String = "", @@ -74,7 +76,7 @@ sealed interface TimelineItem { ) : TimelineItem { val showSenderInformation = groupPosition.isNew() && !isMine - val safeSenderName: String = senderDisambiguatedDisplayName ?: senderId.value + val safeSenderName: String = senderProfile.getDisambiguatedDisplayName(senderId) val failedToSend: Boolean = localSendState is LocalEventSendState.SendingFailed diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileTimelineDetails.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileTimelineDetails.kt index efbc2564a9..b4b6dd2a79 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileTimelineDetails.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileTimelineDetails.kt @@ -52,3 +52,10 @@ fun ProfileTimelineDetails.getDisambiguatedDisplayName(userId: UserId): String { else -> userId.value } } + +fun ProfileTimelineDetails.getAvatarUrl(): String? { + return when (this) { + is ProfileTimelineDetails.Ready -> avatarUrl + else -> null + } +} From bcbd989ec0663cff6e9330edd7c5b764db42b24e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 15:54:05 +0200 Subject: [PATCH 117/289] Reply: render sender name of replied event on 1 line only. --- .../io/element/android/libraries/textcomposer/TextComposer.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt index 0fea92a014..e31183bd14 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt @@ -566,6 +566,8 @@ private fun ReplyToModeView( modifier = Modifier .fillMaxWidth() .clipToBounds(), + maxLines = 1, + overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodySmMedium, textAlign = TextAlign.Start, color = ElementTheme.materialColors.primary, @@ -731,7 +733,7 @@ internal fun TextComposerReplyPreview() = ElementPreview { voiceMessageState = VoiceMessageState.Idle, composerMode = MessageComposerMode.Reply( isThreaded = true, - senderName = "Alice", + senderName = "Alice with a very long name to test overflow in the composer", eventId = EventId("$1234"), attachmentThumbnailInfo = null, defaultContent = "A message\n" + From 5914ec04da539b393c0a503f1490e79ef1d8acb6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 15:58:35 +0200 Subject: [PATCH 118/289] Format --- .../impl/sender/SenderNameDataProvider.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt index 6498aa0bb4..1fd11e6780 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt @@ -37,16 +37,25 @@ open class SenderNameDataProvider : PreviewParameterProvider { ) .flatMap { senderNameMode -> sequenceOf( - aSenderNameData(senderNameMode = senderNameMode), - aSenderNameData(displayNameAmbiguous = true, senderNameMode = senderNameMode), - SenderNameData(UserId("@alice:${senderNameMode.javaClass.name.lowercase()}"), ProfileTimelineDetails.Unavailable, senderNameMode = senderNameMode), + aSenderNameData( + senderNameMode = senderNameMode, + ), + aSenderNameData( + senderNameMode = senderNameMode, + displayNameAmbiguous = true, + ), + SenderNameData( + senderNameMode = senderNameMode, + userId = UserId("@alice:${senderNameMode.javaClass.name.lowercase()}"), + profileTimelineDetails = ProfileTimelineDetails.Unavailable, + ), ) } } fun aSenderNameData( - displayNameAmbiguous: Boolean = false, senderNameMode: SenderNameMode, + displayNameAmbiguous: Boolean = false, ) = SenderNameData( userId = UserId("@alice:${senderNameMode.javaClass.name.lowercase()}"), profileTimelineDetails = aProfileTimelineDetailsReady( From 644eebc6e4a0cf478b25d31ec2f53f56acdb1bae Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 15:58:51 +0200 Subject: [PATCH 119/289] Private --- .../features/messages/impl/sender/SenderNameDataProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt index 1fd11e6780..10957e57ee 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt @@ -53,7 +53,7 @@ open class SenderNameDataProvider : PreviewParameterProvider { } } -fun aSenderNameData( +private fun aSenderNameData( senderNameMode: SenderNameMode, displayNameAmbiguous: Boolean = false, ) = SenderNameData( From c3f9d37b0bdbe84725aa94e2095ed2b21998193c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 16:08:00 +0200 Subject: [PATCH 120/289] Fix test compilation issue. --- .../features/messages/impl/fixtures/MessageEventFixtures.kt | 3 ++- .../messages/impl/timeline/groups/TimelineItemGrouperTest.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt index 2a4e7e5319..b959ff151f 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt @@ -18,6 +18,7 @@ package io.element.android.features.messages.impl.fixtures import io.element.android.features.messages.impl.timeline.aTimelineItemDebugInfo import io.element.android.features.messages.impl.timeline.aTimelineItemReactions +import io.element.android.features.messages.impl.timeline.components.aProfileTimelineDetailsReady import io.element.android.features.messages.impl.timeline.model.InReplyToDetails import io.element.android.features.messages.impl.timeline.model.ReadReceiptData import io.element.android.features.messages.impl.timeline.model.TimelineItem @@ -48,7 +49,7 @@ internal fun aMessageEvent( id = eventId?.value.orEmpty(), eventId = eventId, senderId = A_USER_ID, - senderDisambiguatedDisplayName = A_USER_NAME, + senderProfile = aProfileTimelineDetailsReady(displayName = A_USER_NAME), senderAvatar = AvatarData(A_USER_ID.value, A_USER_NAME, size = AvatarSize.TimelineSender), content = content, sentTime = "", diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt index d560a87e1b..3cfc34ee51 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt @@ -20,6 +20,7 @@ import com.google.common.truth.Truth.assertThat import io.element.android.features.messages.impl.fixtures.aMessageEvent import io.element.android.features.messages.impl.timeline.aTimelineItemDebugInfo import io.element.android.features.messages.impl.timeline.aTimelineItemReactions +import io.element.android.features.messages.impl.timeline.components.aProfileTimelineDetailsReady import io.element.android.features.messages.impl.timeline.model.ReadReceiptData import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.TimelineItemReadReceipts @@ -39,7 +40,7 @@ class TimelineItemGrouperTest { id = "0", senderId = A_USER_ID, senderAvatar = anAvatarData(), - senderDisambiguatedDisplayName = "", + senderProfile = aProfileTimelineDetailsReady(displayName = ""), content = TimelineItemStateEventContent(body = "a state event"), reactionsState = aTimelineItemReactions(count = 0), readReceiptState = TimelineItemReadReceipts(emptyList().toImmutableList()), From d1fdbeb8bbf623c0bae39e9ec9763c63937dafe4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 16:22:15 +0200 Subject: [PATCH 121/289] Import string. --- libraries/eventformatter/impl/src/main/res/values/localazy.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/eventformatter/impl/src/main/res/values/localazy.xml b/libraries/eventformatter/impl/src/main/res/values/localazy.xml index 53589974fe..5e06d74e92 100644 --- a/libraries/eventformatter/impl/src/main/res/values/localazy.xml +++ b/libraries/eventformatter/impl/src/main/res/values/localazy.xml @@ -30,7 +30,7 @@ "You joined the room" "%1$s requested to join" "%1$s allowed %2$s to join" - "%1$s allowed you to join" + "You allowed %1$s to join" "You requested to join" "%1$s rejected %2$s\'s request to join" "You rejected %1$s\'s request to join" From 12cd1ce5eef63e3612b1722037e9f004ac757789 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 16:56:31 +0200 Subject: [PATCH 122/289] Fix test --- .../eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt index f2000442eb..9ee1dce352 100644 --- a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt +++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt @@ -432,7 +432,7 @@ class DefaultRoomLastMessageFormatterTest { val youAcceptedKnockEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = someoneContent) val youAcceptedKnock = formatter.format(youAcceptedKnockEvent, false) - assertThat(youAcceptedKnock).isEqualTo("${someoneContent.userId} allowed you to join") + assertThat(youAcceptedKnock).isEqualTo("You allowed ${someoneContent.userId} to join") val someoneAcceptedKnockEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent) val someoneAcceptedKnock = formatter.format(someoneAcceptedKnockEvent, false) From 06f07f906a5ff001af050e6494dd5c795507e7c7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Apr 2024 18:05:26 +0200 Subject: [PATCH 123/289] fix bad userId --- .../features/messages/impl/sender/SenderNameDataProvider.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt index 10957e57ee..138038bb2f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameDataProvider.kt @@ -46,7 +46,7 @@ open class SenderNameDataProvider : PreviewParameterProvider { ), SenderNameData( senderNameMode = senderNameMode, - userId = UserId("@alice:${senderNameMode.javaClass.name.lowercase()}"), + userId = UserId("@alice:${senderNameMode.javaClass.simpleName.lowercase()}"), profileTimelineDetails = ProfileTimelineDetails.Unavailable, ), ) @@ -57,9 +57,9 @@ private fun aSenderNameData( senderNameMode: SenderNameMode, displayNameAmbiguous: Boolean = false, ) = SenderNameData( - userId = UserId("@alice:${senderNameMode.javaClass.name.lowercase()}"), + userId = UserId("@alice:${senderNameMode.javaClass.simpleName.lowercase()}"), profileTimelineDetails = aProfileTimelineDetailsReady( - displayName = "Alice ${senderNameMode.javaClass.name}", + displayName = "Alice ${senderNameMode.javaClass.simpleName}", displayNameAmbiguous = displayNameAmbiguous, ), senderNameMode = senderNameMode, From ec730c63685ea792d16f4e4b88716c294c1cd113 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Mon, 22 Apr 2024 16:54:15 +0000 Subject: [PATCH 124/289] Update screenshots --- ...ntent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...ent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...derName_null_SenderName-Day-8_8_null_0,NEXUS_5,1.0,en].png | 3 +++ ...derName_null_SenderName-Day-8_8_null_1,NEXUS_5,1.0,en].png | 3 +++ ...derName_null_SenderName-Day-8_8_null_2,NEXUS_5,1.0,en].png | 3 +++ ...derName_null_SenderName-Day-8_8_null_3,NEXUS_5,1.0,en].png | 3 +++ ...derName_null_SenderName-Day-8_8_null_4,NEXUS_5,1.0,en].png | 3 +++ ...derName_null_SenderName-Day-8_8_null_5,NEXUS_5,1.0,en].png | 3 +++ ...derName_null_SenderName-Day-8_8_null_6,NEXUS_5,1.0,en].png | 3 +++ ...derName_null_SenderName-Day-8_8_null_7,NEXUS_5,1.0,en].png | 3 +++ ...derName_null_SenderName-Day-8_8_null_8,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_0,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_1,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_2,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_3,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_4,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_5,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_6,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_7,NEXUS_5,1.0,en].png | 3 +++ ...rName_null_SenderName-Night-8_9_null_8,NEXUS_5,1.0,en].png | 3 +++ ...ojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en].png} | 0 ...iItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en].png} | 0 ...icker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en].png} | 0 ...ker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en].png} | 0 ...on_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en].png} | 0 ..._null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en].png} | 0 ...ineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en].png} | 0 ...eImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en].png} | 0 ...imelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en].png} | 0 ...imelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en].png} | 0 ...imelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en].png} | 0 ...elineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en].png} | 0 ...elineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en].png} | 0 ...elineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en].png} | 0 ...elineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png} | 0 ...ineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png} | 0 ...TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en].png} | 0 ...TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en].png} | 0 ...TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en].png} | 0 ...melineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en].png} | 0 ...melineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en].png} | 0 ...melineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en].png} | 0 ...imelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en].png} | 0 ...imelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en].png} | 0 ...imelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en].png} | 0 ...elineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en].png} | 0 ...elineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en].png} | 0 ...elineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en].png} | 0 ...ineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en].png} | 0 ...eItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en].png} | 0 ...emLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en].png} | 0 ...LegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en].png} | 0 ...lineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en].png} | 0 ...lineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en].png} | 0 ...neItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en].png} | 0 ...neItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en].png} | 0 ...TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en].png} | 0 ...TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en].png} | 0 ...TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en].png} | 0 ...TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en].png} | 0 ...melineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en].png} | 0 ...melineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en].png} | 0 ...melineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en].png} | 0 ...melineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en].png} | 0 ...melineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en].png} | 0 ...lineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en].png} | 0 ...imelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en].png} | 0 ...elineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en].png} | 0 ...elineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en].png} | 0 ...elineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en].png} | 0 ...ineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en].png} | 0 ...ineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en].png} | 0 ...ineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en].png} | 0 ...TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en].png} | 0 ...TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en].png} | 0 ...TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en].png} | 0 ...TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en].png} | 0 ...TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en].png} | 0 ...TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en].png} | 0 ...melineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en].png} | 0 ...melineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en].png} | 0 ...melineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en].png} | 0 ...melineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en].png} | 0 ...melineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en].png} | 0 ...melineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en].png} | 0 ...imelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en].png} | 0 ...elineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en].png} | 0 ...imelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en].png} | 0 ...imelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en].png} | 0 ...imelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en].png} | 0 ...elineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en].png} | 0 ...elineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en].png} | 0 ...elineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en].png} | 0 ...neItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en].png} | 0 ...ItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en].png} | 0 ...lineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en].png} | 0 ...lineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en].png} | 0 ...lineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en].png} | 0 ...lineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en].png} | 0 ...lineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en].png} | 0 ...ineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en].png} | 0 ...eVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en].png} | 0 ...w_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en].png} | 0 ...null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en].png} | 0 ...nt_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en].png} | 0 ..._null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en].png} | 0 ...adReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en].png} | 0 ...adReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en].png} | 0 ...adReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en].png} | 0 ...adReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en].png} | 0 ...adReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en].png} | 0 ...adReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en].png} | 0 ...ReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en].png} | 0 ...ReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en].png} | 0 ...ReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en].png} | 0 ...ReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en].png} | 0 ...ReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en].png} | 0 ...ReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en].png} | 0 ...eItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en].png} | 0 ...eItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en].png} | 0 ...eItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en].png} | 0 ...eItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en].png} | 0 ...eItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en].png} | 0 ...eItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en].png} | 0 ...eItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en].png} | 0 ...eItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en].png} | 0 ...temReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en].png} | 0 ...temReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en].png} | 0 ...temReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en].png} | 0 ...temReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en].png} | 0 ...temReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en].png} | 0 ...temReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en].png} | 0 ...temReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en].png} | 0 ...temReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en].png} | 0 ...RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en].png} | 0 ...RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en].png} | 0 ...trySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en].png} | 0 ...trySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en].png} | 0 ...yptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en].png} | 0 ...tedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en].png} | 0 ...ItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en].png} | 0 ...ItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en].png} | 0 ...emDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en].png} | 0 ...emDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en].png} | 0 ...lineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en].png} | 0 ...neItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en].png} | 0 ...eItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en].png} | 0 ...temRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en].png} | 0 ...neLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png} | 0 ...LoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_0,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_1,NEXUS_5,1.0,en].png} | 0 ..._MessageEventBubble-Day-10_10_null_10,NEXUS_5,1.0,en].png} | 0 ..._MessageEventBubble-Day-10_10_null_11,NEXUS_5,1.0,en].png} | 0 ..._MessageEventBubble-Day-10_10_null_12,NEXUS_5,1.0,en].png} | 0 ..._MessageEventBubble-Day-10_10_null_13,NEXUS_5,1.0,en].png} | 0 ..._MessageEventBubble-Day-10_10_null_14,NEXUS_5,1.0,en].png} | 0 ..._MessageEventBubble-Day-10_10_null_15,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_2,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_3,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_4,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_5,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_6,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_7,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_8,NEXUS_5,1.0,en].png} | 0 ...l_MessageEventBubble-Day-10_10_null_9,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_0,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_1,NEXUS_5,1.0,en].png} | 0 ...essageEventBubble-Night-10_11_null_10,NEXUS_5,1.0,en].png} | 0 ...essageEventBubble-Night-10_11_null_11,NEXUS_5,1.0,en].png} | 0 ...essageEventBubble-Night-10_11_null_12,NEXUS_5,1.0,en].png} | 0 ...essageEventBubble-Night-10_11_null_13,NEXUS_5,1.0,en].png} | 0 ...essageEventBubble-Night-10_11_null_14,NEXUS_5,1.0,en].png} | 0 ...essageEventBubble-Night-10_11_null_15,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_2,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_3,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_4,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_5,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_6,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_7,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_8,NEXUS_5,1.0,en].png} | 0 ...MessageEventBubble-Night-10_11_null_9,NEXUS_5,1.0,en].png} | 0 ...ageStateEventContainer-Day-11_11_null,NEXUS_5,1.0,en].png} | 0 ...eStateEventContainer-Night-11_12_null,NEXUS_5,1.0,en].png} | 0 ...sagesReactionButtonAdd-Day-13_13_null,NEXUS_5,1.0,en].png} | 0 ...gesReactionButtonAdd-Night-13_14_null,NEXUS_5,1.0,en].png} | 0 ...gesReactionButtonExtra-Day-14_14_null,NEXUS_5,1.0,en].png} | 0 ...sReactionButtonExtra-Night-14_15_null,NEXUS_5,1.0,en].png} | 0 ...ssagesReactionButton-Day-12_12_null_0,NEXUS_5,1.0,en].png} | 0 ...ssagesReactionButton-Day-12_12_null_1,NEXUS_5,1.0,en].png} | 0 ...ssagesReactionButton-Day-12_12_null_2,NEXUS_5,1.0,en].png} | 0 ...ssagesReactionButton-Day-12_12_null_3,NEXUS_5,1.0,en].png} | 0 ...agesReactionButton-Night-12_13_null_0,NEXUS_5,1.0,en].png} | 0 ...agesReactionButton-Night-12_13_null_1,NEXUS_5,1.0,en].png} | 0 ...agesReactionButton-Night-12_13_null_2,NEXUS_5,1.0,en].png} | 0 ...agesReactionButton-Night-12_13_null_3,NEXUS_5,1.0,en].png} | 0 ...ll_ReplySwipeIndicator-Day-15_15_null,NEXUS_5,1.0,en].png} | 0 ..._ReplySwipeIndicator-Night-15_16_null,NEXUS_5,1.0,en].png} | 0 ...neEventTimestampView-Day-16_16_null_0,NEXUS_5,1.0,en].png} | 0 ...neEventTimestampView-Day-16_16_null_1,NEXUS_5,1.0,en].png} | 0 ...neEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,en].png} | 0 ...neEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,en].png} | 0 ...EventTimestampView-Night-16_17_null_0,NEXUS_5,1.0,en].png} | 0 ...EventTimestampView-Night-16_17_null_1,NEXUS_5,1.0,en].png} | 0 ...EventTimestampView-Night-16_17_null_2,NEXUS_5,1.0,en].png} | 0 ...EventTimestampView-Night-16_17_null_3,NEXUS_5,1.0,en].png} | 0 ...EventRowDisambiguated-Day-18_18_null_0,NEXUS_5,1.0,en].png | 3 +++ ...entRowDisambiguated-Night-18_19_null_0,NEXUS_5,1.0,en].png | 3 +++ ...mEventRowForDirectRoom-Day-19_19_null,NEXUS_5,1.0,en].png} | 0 ...ventRowForDirectRoom-Night-19_20_null,NEXUS_5,1.0,en].png} | 0 ...elineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png | 4 ++-- ...ItemEventRowTimestamp-Day-18_18_null_0,NEXUS_5,1.0,en].png | 3 --- ...ItemEventRowTimestamp-Day-18_18_null_1,NEXUS_5,1.0,en].png | 3 --- ...ItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,en].png | 3 --- ...ItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,en].png | 3 --- ...ItemEventRowTimestamp-Day-20_20_null_0,NEXUS_5,1.0,en].png | 3 +++ ...ItemEventRowTimestamp-Day-20_20_null_1,NEXUS_5,1.0,en].png | 3 +++ ...ItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,en].png | 3 +++ ...ItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,en].png | 3 +++ ...emEventRowTimestamp-Night-18_19_null_0,NEXUS_5,1.0,en].png | 3 --- ...emEventRowTimestamp-Night-18_19_null_1,NEXUS_5,1.0,en].png | 3 --- ...emEventRowTimestamp-Night-18_19_null_2,NEXUS_5,1.0,en].png | 3 --- ...emEventRowTimestamp-Night-18_19_null_3,NEXUS_5,1.0,en].png | 3 --- ...emEventRowTimestamp-Night-20_21_null_0,NEXUS_5,1.0,en].png | 3 +++ ...emEventRowTimestamp-Night-20_21_null_1,NEXUS_5,1.0,en].png | 3 +++ ...emEventRowTimestamp-Night-20_21_null_2,NEXUS_5,1.0,en].png | 3 +++ ...emEventRowTimestamp-Night-20_21_null_3,NEXUS_5,1.0,en].png | 3 +++ ...ntRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,en].png} | 0 ...RowWithManyReactions-Night-21_22_null,NEXUS_5,1.0,en].png} | 0 ...neItemEventRowWithRR-Day-22_22_null_0,NEXUS_5,1.0,en].png} | 0 ...neItemEventRowWithRR-Day-22_22_null_1,NEXUS_5,1.0,en].png} | 0 ...neItemEventRowWithRR-Day-22_22_null_2,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithRR-Night-22_23_null_0,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithRR-Night-22_23_null_1,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithRR-Night-22_23_null_2,NEXUS_5,1.0,en].png} | 0 ...WithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,en].png} | 0 ...WithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,en].png} | 0 ...thReplyInformative-Night-23_24_null_0,NEXUS_5,1.0,en].png} | 0 ...thReplyInformative-Night-23_24_null_1,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en].png} | 0 ...EventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en].png} | 0 ...EventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en].png} | 0 ...l_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png} | 0 ...TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png} | 0 ...entsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en].png} | 0 ...tsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en].png} | 0 ...entsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png} | 0 ...tsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png} | 0 ...ineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en].png} | 0 ...eItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en].png} | 0 ...neItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en].png} | 0 ...ItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en].png} | 0 ...mReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en].png} | 0 ...eactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en].png} | 0 ...mReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en].png} | 0 ...eactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en].png} | 0 ...elineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en].png} | 0 ...ineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en].png} | 0 ...elineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en].png} | 0 ...ineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en].png} | 0 ...ull_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en].png} | 0 ...l_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png} | 0 ...iew_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png} | 0 ...iew_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png} | 0 ...iew_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png} | 0 ...iew_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png} | 0 ...iew_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png} | 0 ...iew_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png} | 0 ...iew_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png} | 0 ...View_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png} | 0 ..._null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png} | 0 ..._null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png} | 0 ..._null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png} | 0 ..._null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png} | 0 ..._null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png} | 0 ..._null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png} | 0 ..._null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png} | 0 ...w_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png} | 0 ...ssagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png} | 0 ...ssagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png} | 0 ...ssagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png} | 0 ...agesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png} | 0 ...agesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png} | 0 ...agesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en].png} | 0 ...pingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en].png} | 0 ...ngNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en].png} | 0 ...ly_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en].png | 4 ++-- ..._null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en].png | 4 ++-- 369 files changed, 94 insertions(+), 34 deletions(-) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_5,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_6,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_8,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_5,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_6,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_8,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-31_31_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-31_32_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-32_32_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-32_33_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-51_51_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-51_52_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-37_37_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-37_38_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-34_35_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-38_38_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-38_39_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-39_40_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-42_43_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-43_43_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-43_44_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-46_47_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-50_50_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-50_51_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-48_48_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-48_49_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-52_52_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-52_53_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-53_53_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-53_54_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-57_58_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-59_60_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-60_61_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-61_61_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-61_62_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_15,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_15,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_15,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_15,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-10_10_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-11_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-10_11_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-11_12_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-13_13_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-13_14_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-14_14_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-14_15_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-14_14_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-15_15_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-14_15_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-15_16_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_3,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Day-18_18_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Night-18_19_null_0,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-17_17_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-19_19_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-17_18_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-19_20_null,NEXUS_5,1.0,en].png} (100%) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_3,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-19_20_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-21_22_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-16_16_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-16_17_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-24_25_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-23_24_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-25_26_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-27_27_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-27_28_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-28_29_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-29_30_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-26_26_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-26_27_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-30_30_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-30_31_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-62_62_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-62_63_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_15,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_16,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en].png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en].png index f5be007193..292003117a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dfe460e8bab0a27a31984ce8c85ed98aef2a994584f724375cd436d5c1c7c6ca -size 44758 +oid sha256:d0a65496766e211ffed310034d3575e5421a4ab1b72c41a09bb6ea17ff7b98e2 +size 47043 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en].png index 0cbbb24fd4..06afb9c2db 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63b40ee6d9b4fa6f049dedbfc628380069360e67129b8e53b94e04d25b5897bf -size 42898 +oid sha256:dd7e754bf281cc44e6b6e6175e18c66a1575bbf5f25f588f465af37b364b5d63 +size 45074 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c36d52f346 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f24d7e9c2ce18612ecc82ebbe28598ebdbe527a7ca6d3f4507a303d41da708c0 +size 6497 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e9f0e3a320 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e91d1ffe38ca636208a1e093205893b460f2b7940892bfa641c1401d0f1365d +size 8941 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..87f4fb4156 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fc88d9c3c4ad18d26441e6e8da4f58b8d9e281dd7712adc31080c900dc13e53 +size 7101 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..baa99b458d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d73d668bdc2d792978dd36d4b366264f02f93843e6526ba7533992c77cb881a1 +size 6619 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..2ef4383296 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b20874adf3b3cd1e369d11f631bfc6187dae44a816eccb7f6510217409554716 +size 8663 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..bc022e25c0 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01b47b2ed0cbb29c8f302bbe5f7c24b9c1579ae92f558e7d5c8a579908f04b50 +size 7094 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..bd36518b4c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba7f63a6d8bda28570e062f62583b7c05bdea6dd477c1cc09ef4f8a2f4041193 +size 7125 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d6eef5f689 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed81c75139e4c049b0749e2ea89012f8e6e87e455b068ef15ee710444c860f4c +size 9536 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_8,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..bc1a7e9a76 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_8,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dab27eb42b0634e4a3833c08846a4ca42fa687c35c381c768b2ddab68e1a31c8 +size 7728 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..cc4fcf17b8 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162d5572e58c7dfb8697a55a1f9c988758c708173b35816907e569a36f0ab75 +size 6580 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..846ed6a524 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:526004d2ac5d035bf945a097f2239430ce8395513a5d3b7f2ea74066d98a0785 +size 8938 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..47f2772393 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f639a20541b3be5de0508abcf70ef86472968b546d8926b8b91742b37637aece +size 7247 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ab91f06daf --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83edcd9d31bd25873b0448f442322e0932744a409cf8582da0f90aaa5feac21e +size 6468 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d209d9632f --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:731261ff2c90e668774218eb721e9fad88e2430ed71e355c218cc7f9af40b425 +size 8436 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..dbf7b1cd46 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cf7fca11dc7f6f7e91cd5ff4012552812665eeebdfa146b416fa70f297123c9 +size 6837 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..38d90fe70f --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e357210874255c01ae10d17bad0a9b2ddf738f9d5d757ecfba8690280a2ec498 +size 6906 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c5a50946ab --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:016935a98b882d4d21df4838e5ac5e679a5854ca9cbd73045b9e07cff6673b2b +size 9319 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_8,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..703fbf0f91 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_8,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee629c6d2e8b01ee2c5ba393563466d1dd39bfadd7a4d3159f6f4fe2d899d57e +size 7358 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-31_31_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-31_31_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-31_32_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-31_32_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-32_32_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-32_32_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-32_33_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-32_33_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-51_51_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-51_51_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-51_52_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-51_52_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-37_37_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-37_37_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-37_38_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-37_38_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-34_35_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-34_35_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-38_38_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-38_38_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-38_39_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-38_39_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-39_40_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-39_40_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-42_43_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-42_43_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-43_43_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-43_43_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-43_44_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-43_44_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-46_47_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-46_47_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-50_50_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-50_50_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-50_51_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-50_51_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-48_48_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-48_48_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-48_49_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-48_49_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-52_52_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-52_52_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-52_53_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-52_53_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-53_53_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-53_53_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-53_54_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-53_54_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-57_58_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-57_58_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-59_60_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-59_60_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-60_61_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-60_61_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-61_61_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-61_61_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-61_62_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-61_62_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_15,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_15,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_15,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_15,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_15,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_15,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-10_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-11_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-10_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-11_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-10_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-11_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-10_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-11_12_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-13_13_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-13_13_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-13_14_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-13_14_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-14_14_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-14_14_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-14_15_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-14_15_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-14_14_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-15_15_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-14_14_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-15_15_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-14_15_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-15_16_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-14_15_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-15_16_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Day-18_18_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Day-18_18_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..477d5c5f04 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Day-18_18_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a37a7c776c607be81689ee9333be6d2320490d45f60d1fe8db47bb36a570af00 +size 171702 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Night-18_19_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Night-18_19_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..1997c3abea --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Night-18_19_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1451618b7bfbb697e90a802c5cd8f9169811013054914211f1215d041ad8b22 +size 169676 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-17_17_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-19_19_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-17_17_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-19_19_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-17_18_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-19_20_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-17_18_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-19_20_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png index b9ae14e82a..680eb66108 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:777209b58d18b92e86d4ac90cb741d477793caa84bb1b2b19a3b459675bae244 -size 18276 +oid sha256:d509d8fb7fe67e7ee2e04794608f5e4c9b1ec5ea309384ca25eaa0600416be5f +size 23064 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 06706d5db0..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f99a45bad10518fc7cdd0c6b62c3b7c12b953d5c12b76374adc57beeaeed05dc -size 31900 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index 8d9cf15c54..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ab5044dc8720dd420b05d683111f55cc4e637b4b9d322a207f087a83ad217a1 -size 33705 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index 4070a0fe7b..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6410f925c934ad5319089e7842fa7f32fba671987db9aef7eebe4a72268baeb2 -size 35858 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index 0ddcb647fa..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34f66bee5add2520836eadbd3ad670d18b29a9c735e555f08e049bb6ac66328c -size 37635 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..58ca271f07 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7406324e48ab17e3271abc1d8534a89c092fe1711753135bd7b029f1a4c78e7 +size 31297 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f3882744d9 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d28dfc44dead29d53ef4b00f4e50630aba8112819ba86ef65fe9855e91791d04 +size 33036 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e231f1c3c4 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a062ebb40f50614dc6f66b6275bb22be6aab522d15d0e592226d9e4c9f6c81a +size 35202 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..344d40fe31 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:842a98b256a63e3179d9570a11acd394a1626d37f6598b0949889c22eeb1bb50 +size 36982 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 26694f2bf4..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a5255922d4e387028b67cd9c6132321ace8c6b7878b91e4b394b2ea5586338e9 -size 32315 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index dd11b039c7..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:221b0f80a3b040168168477918ec9a70687d402162b1981f6337b200ac229233 -size 33509 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index fc928ab30d..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c211c5f61757048cd1468a98f100ce5d295767e17deb6d2c7f587b0c5277138 -size 35840 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index 7412dd6f2f..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c956cd776622853e439c837508ddb9133eeb94404a527aae4d5939d7326481d6 -size 36938 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..1c452f6fa2 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90e6dec2b44898f2efe2c5b19f0f458cb3ee97536051dad7b7aae56779d7cfae +size 31603 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..860d39bd6e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c092258e3f0fd94fd75962dac270ffa437e0269f8cdb481d2ddcce6511f9fa51 +size 32815 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..1e47cc9c90 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:161577941982e8ea7791b158d52866927d7759dadaa03a296ffdc08d2ef8a6f0 +size 35143 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..455a320f3c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9e69db9ae23374d1170dd74f01b9aa8bb12dab87152c8cfa117fb2e9a95f190 +size 36233 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-19_20_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-21_22_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-19_20_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-21_22_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-16_16_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-16_16_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-16_17_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-16_17_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-24_25_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-24_25_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-23_24_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-23_24_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-25_26_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-25_26_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-27_27_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-27_27_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-27_28_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-27_28_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-28_29_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-28_29_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-29_30_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-29_30_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-26_26_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-26_26_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-26_27_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-26_27_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-30_30_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-30_30_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-30_31_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-30_31_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-62_62_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-62_62_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-62_63_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-62_63_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_15,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_16,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en].png index ffd15b692f..2386ff32e4 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa888f744de18d1b12e99f52e613612c8287d4b0befd918d2b9f25291a5ce10b -size 88192 +oid sha256:465a3bc8c83db8dd8da0f137b433efc08c4d1d91e0246e0b760a3ec5dbf35128 +size 91331 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en].png index bf0276a54d..d6071e890a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5bae68a4a715dac54a14fdc75f17f5e82d4709ac082c219daa9eeb44dcb2d6ad -size 84018 +oid sha256:e5b29ab852c434f60b2581653c11ad10563e935b55353219c4674255aa36b711 +size 86582 From 320e7145caf530a77e686e9e588ae90e425bd3b0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Apr 2024 11:51:13 +0200 Subject: [PATCH 125/289] Handle properly the migration of DefaultSessionPreferencesStore #2742 --- .../store/DefaultSessionPreferencesStore.kt | 15 ++++--- .../store/SessionPreferencesStoreMigration.kt | 39 +++++++++++++++++++ 2 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesStoreMigration.kt diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt index 770ca699fe..05bbe9c048 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt @@ -29,9 +29,7 @@ import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map -import kotlinx.coroutines.runBlocking import java.io.File class DefaultSessionPreferencesStore( @@ -53,7 +51,15 @@ class DefaultSessionPreferencesStore( private val renderTypingNotificationsKey = booleanPreferencesKey("renderTypingNotifications") private val dataStoreFile = storeFile(context, sessionId) - private val store = PreferenceDataStoreFactory.create(scope = sessionCoroutineScope) { dataStoreFile } + private val store = PreferenceDataStoreFactory.create( + scope = sessionCoroutineScope, + migrations = listOf( + SessionPreferencesStoreMigration( + sharePresenceKey, + sendPublicReadReceiptsKey, + ) + ), + ) { dataStoreFile } override suspend fun setSharePresence(enabled: Boolean) { update(sharePresenceKey, enabled) @@ -65,8 +71,7 @@ class DefaultSessionPreferencesStore( } override fun isSharePresenceEnabled(): Flow { - // Migration, if sendPublicReadReceiptsKey was false, consider that sharing presence is false. - return get(sharePresenceKey) { runBlocking { isSendPublicReadReceiptsEnabled().first() } } + return get(sharePresenceKey) { true } } override suspend fun setSendPublicReadReceipts(enabled: Boolean) = update(sendPublicReadReceiptsKey, enabled) diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesStoreMigration.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesStoreMigration.kt new file mode 100644 index 0000000000..037eb5ae0c --- /dev/null +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesStoreMigration.kt @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.preferences.impl.store + +import androidx.datastore.core.DataMigration +import androidx.datastore.preferences.core.Preferences + +class SessionPreferencesStoreMigration( + private val sharePresenceKey: Preferences.Key, + private val sendPublicReadReceiptsKey: Preferences.Key, +) : DataMigration { + override suspend fun cleanUp() = Unit + + override suspend fun shouldMigrate(currentData: Preferences): Boolean { + return currentData[sharePresenceKey] == null + } + + override suspend fun migrate(currentData: Preferences): Preferences { + // If sendPublicReadReceiptsKey was false, consider that sharing presence is false. + val defaultValue = currentData[sendPublicReadReceiptsKey] ?: true + return currentData.toMutablePreferences().apply { + set(sharePresenceKey, defaultValue) + }.toPreferences() + } +} From 0d7cffe4001262b85fcd078a7724fafd29ecf4c0 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 23 Apr 2024 13:30:55 +0200 Subject: [PATCH 126/289] Timeline permalink : continue to iterate (try a strategy to avoid forward insertion to "auto-scroll") --- .../features/messages/impl/MessagesNode.kt | 14 +- .../impl/timeline/TimelineController.kt | 135 ++++++++++++++++++ .../messages/impl/timeline/TimelineEvents.kt | 6 +- .../impl/timeline/TimelineItemIndexer.kt | 65 +++++++++ .../impl/timeline/TimelinePresenter.kt | 99 +++++++++---- .../messages/impl/timeline/TimelineState.kt | 14 +- .../impl/timeline/TimelineStateProvider.kt | 5 +- .../messages/impl/timeline/TimelineView.kt | 98 +++++++++++-- .../components/TimelineItemVirtualRow.kt | 7 +- .../virtual/TimelineLoadingMoreIndicator.kt | 13 +- .../factories/TimelineItemsFactory.kt | 17 ++- .../virtual/TimelineItemVirtualFactory.kt | 4 +- .../TimelineItemInvisibleIndicatorModel.kt | 5 +- .../TimelineItemLoadingIndicatorModel.kt | 4 +- .../poll/impl/history/PollHistoryPresenter.kt | 4 +- .../libraries/matrix/api/room/MatrixRoom.kt | 6 +- .../matrix/api/timeline/DetachedTimeline.kt | 24 ---- .../matrix/api/timeline/LiveTimeline.kt | 25 ---- .../libraries/matrix/api/timeline/Timeline.kt | 12 +- .../item/virtual/VirtualTimelineItem.kt | 6 +- .../matrix/impl/room/RustMatrixRoom.kt | 20 ++- .../impl/timeline/RustMatrixTimeline.kt | 55 ------- .../{RustLiveTimeline.kt => RustTimeline.kt} | 58 ++++++-- .../InvisibleIndicatorPostProcessor.kt | 79 ++++++++++ .../LoadingIndicatorsPostProcessor.kt | 42 ++++-- 25 files changed, 599 insertions(+), 218 deletions(-) create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt rename libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustDetachedTimeline.kt => features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemInvisibleIndicatorModel.kt (73%) delete mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/DetachedTimeline.kt delete mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/LiveTimeline.kt delete mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt rename libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/{RustLiveTimeline.kt => RustTimeline.kt} (73%) create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/InvisibleIndicatorPostProcessor.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 88472956c0..70e077eb04 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -30,6 +30,7 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.messages.impl.attachments.Attachment +import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.di.TimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.model.TimelineItem @@ -116,6 +117,7 @@ class MessagesNode @AssistedInject constructor( private fun onLinkClicked( context: Context, url: String, + eventSink: (TimelineEvents) -> Unit, ) { when (val permalink = permalinkParser.parse(url)) { is PermalinkData.UserLink -> { @@ -124,7 +126,7 @@ class MessagesNode @AssistedInject constructor( callback?.onUserDataClicked(permalink.userId) } is PermalinkData.RoomLink -> { - handleRoomLinkClicked(permalink) + handleRoomLinkClicked(permalink, eventSink) } is PermalinkData.FallbackLink, is PermalinkData.RoomEmailInviteLink -> { @@ -133,11 +135,11 @@ class MessagesNode @AssistedInject constructor( } } - private fun handleRoomLinkClicked(roomLink: PermalinkData.RoomLink) { + private fun handleRoomLinkClicked(roomLink: PermalinkData.RoomLink, eventSink: (TimelineEvents) -> Unit) { if (room.matches(roomLink.roomIdOrAlias)) { - if (roomLink.eventId != null) { - // TODO Handle navigation to the Event - context.toast("TODO Handle navigation to the Event ${roomLink.eventId}") + val eventId = roomLink.eventId + if (eventId != null) { + eventSink(TimelineEvents.FocusOnEvent(eventId)) } else { // Click on the same room, ignore context.toast("Already viewing this room!") @@ -189,7 +191,7 @@ class MessagesNode @AssistedInject constructor( onEventClicked = this::onEventClicked, onPreviewAttachments = this::onPreviewAttachments, onUserDataClicked = this::onUserDataClicked, - onLinkClicked = { onLinkClicked(context, it) }, + onLinkClicked = { onLinkClicked(context, it, state.timelineState.eventSink) }, onSendLocationClicked = this::onSendLocationClicked, onCreatePollClicked = this::onCreatePollClicked, onJoinCallClicked = this::onJoinCallClicked, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt new file mode 100644 index 0000000000..e4ae628263 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline + +import androidx.compose.runtime.MutableState +import io.element.android.features.messages.impl.timeline.model.TimelineItem +import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.di.SingleIn +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.ReceiptType +import io.element.android.libraries.matrix.api.timeline.Timeline +import kotlinx.collections.immutable.ImmutableList +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.filterIsInstance +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.getAndUpdate +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import java.util.Optional +import javax.inject.Inject +import kotlin.coroutines.cancellation.CancellationException + +@SingleIn(RoomScope::class) +class TimelineController @Inject constructor( + private val room: MatrixRoom, +) { + + private val liveTimeline = MutableStateFlow(room.liveTimeline) + private val detachedTimeline = MutableStateFlow>(Optional.empty()) + + @OptIn(ExperimentalCoroutinesApi::class) + fun timelineItems(): Flow> { + return currentTimelineFlow().flatMapLatest { it.timelineItems } + } + + fun isLive(): Flow { + return detachedTimeline.map { !it.isPresent } + } + + suspend fun focusOnEvent(eventId: EventId): Result { + return try { + val newDetachedTimeline = room.timelineFocusedOnEvent(eventId) + detachedTimeline.getAndUpdate { current -> + if (current.isPresent) { + current.get().close() + } + Optional.of(newDetachedTimeline) + } + Result.success(Unit) + } catch (cancellation: CancellationException) { + throw cancellation + } catch (exception: Exception) { + Result.failure(exception) + } + } + + /** + * Makes sure the controller is focused on the live timeline. + * This does close the detached timeline if any. + */ + fun focusOnLive() { + detachedTimeline.getAndUpdate { + when { + it.isPresent -> { + it.get().close() + Optional.empty() + } + else -> Optional.empty() + } + } + } + + suspend fun paginate(direction: Timeline.PaginationDirection): Result { + return currentTimelineFlow().first().paginate(direction) + } + + private fun currentTimelineFlow() = combine(liveTimeline, detachedTimeline) { live, detached -> + when { + detached.isPresent -> detached.get() + else -> live + } + } + + suspend fun sendReadReceiptIfNeeded( + firstVisibleIndex: Int, + timelineItems: ImmutableList, + lastReadReceiptId: MutableState, + readReceiptType: ReceiptType, + ) { + // If we are at the bottom of timeline, we mark the room as read. + if (firstVisibleIndex == 0) { + room.markAsRead(receiptType = readReceiptType) + } else { + // Get last valid EventId seen by the user, as the first index might refer to a Virtual item + val eventId = getLastEventIdBeforeOrAt(firstVisibleIndex, timelineItems) + if (eventId != null && eventId != lastReadReceiptId.value) { + lastReadReceiptId.value = eventId + currentTimelineFlow() + .filterIsInstance(Timeline::class) + .first() + .sendReadReceipt(eventId = eventId, receiptType = readReceiptType) + } + } + } + + private fun getLastEventIdBeforeOrAt(index: Int, items: ImmutableList): EventId? { + for (i in index until items.count()) { + val item = items[i] + if (item is TimelineItem.Event) { + return item.eventId + } + } + return null + } +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt index 62ec074bea..834b80489b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt @@ -17,17 +17,21 @@ package io.element.android.features.messages.impl.timeline import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.timeline.Timeline sealed interface TimelineEvents { data class SetHighlightedEvent(val eventId: EventId?) : TimelineEvents data class OnScrollFinished(val firstIndex: Int) : TimelineEvents + data class FocusOnEvent(val eventId: EventId) : TimelineEvents + data object ClearFocusRequestState: TimelineEvents + data object JumpToLive : TimelineEvents /** * Events coming from a timeline item. */ sealed interface EventFromTimelineItem : TimelineEvents - data class LoadMore(val backwards: Boolean) : EventFromTimelineItem + data class LoadMore(val direction: Timeline.PaginationDirection) : EventFromTimelineItem /** * Events coming from a poll item. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt new file mode 100644 index 0000000000..4507dea99d --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline + +import io.element.android.features.messages.impl.timeline.model.TimelineItem +import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.di.SingleIn +import io.element.android.libraries.matrix.api.core.EventId +import timber.log.Timber +import javax.inject.Inject + +@SingleIn(RoomScope::class) +class TimelineItemIndexer @Inject constructor() { + + private val timelineEventsIndexes = mutableMapOf() + + fun isKnown(eventId: EventId): Boolean { + return timelineEventsIndexes.containsKey(eventId).also { + Timber.d("$eventId isKnown = $it") + } + } + + fun indexOf(eventId: EventId): Int { + return (timelineEventsIndexes[eventId] ?: -1).also { + Timber.d("indexOf $eventId= $it") + } + } + + fun process(timelineItems: List) { + Timber.d("process ${timelineItems.size} items") + timelineEventsIndexes.clear() + timelineItems.forEachIndexed { index, timelineItem -> + when (timelineItem) { + is TimelineItem.Event -> { + processEvent(timelineItem, index) + } + is TimelineItem.GroupedEvents -> { + timelineItem.events.forEach { event -> + processEvent(event, index) + } + } + else -> Unit + } + } + } + + private fun processEvent(event: TimelineItem.Event, index: Int) { + if (event.eventId == null) return + timelineEventsIndexes[event.eventId] = index + } +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt index eede76dae9..8b8f73eb1a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt @@ -56,6 +56,7 @@ import kotlinx.coroutines.withContext class TimelinePresenter @AssistedInject constructor( private val timelineItemsFactory: TimelineItemsFactory, + private val timelineItemIndexer: TimelineItemIndexer, private val room: MatrixRoom, private val dispatchers: CoroutineDispatchers, private val appScope: CoroutineScope, @@ -64,14 +65,13 @@ class TimelinePresenter @AssistedInject constructor( private val sendPollResponseAction: SendPollResponseAction, private val endPollAction: EndPollAction, private val sessionPreferencesStore: SessionPreferencesStore, + private val timelineController: TimelineController, ) : Presenter { @AssistedFactory interface Factory { fun create(navigator: MessagesNavigator): TimelinePresenter } - private val timeline = room.liveTimeline - @Composable override fun present(): TimelineState { val localScope = rememberCoroutineScope() @@ -79,41 +79,52 @@ class TimelinePresenter @AssistedInject constructor( mutableStateOf(null) } + val focusedEventId: MutableState = rememberSaveable { + mutableStateOf(null) + } + val focusRequestState: MutableState = remember { + mutableStateOf(FocusRequestState.None) + } + val lastReadReceiptId = rememberSaveable { mutableStateOf(null) } val timelineItems by timelineItemsFactory.collectItemsAsState() - val paginationState by timeline.backPaginationStatus.collectAsState() + val syncUpdateFlow = room.syncUpdateFlow.collectAsState() val userHasPermissionToSendMessage by room.canSendMessageAsState(type = MessageEventType.ROOM_MESSAGE, updateKey = syncUpdateFlow.value) val userHasPermissionToSendReaction by room.canSendMessageAsState(type = MessageEventType.REACTION, updateKey = syncUpdateFlow.value) val prevMostRecentItemId = rememberSaveable { mutableStateOf(null) } - val newItemState = remember { mutableStateOf(NewEventState.None) } + + val newEventState = remember { mutableStateOf(NewEventState.None) } val isSendPublicReadReceiptsEnabled by sessionPreferencesStore.isSendPublicReadReceiptsEnabled().collectAsState(initial = true) val renderReadReceipts by sessionPreferencesStore.isRenderReadReceiptsEnabled().collectAsState(initial = true) + val isLive by timelineController.isLive().collectAsState(initial = true) fun handleEvents(event: TimelineEvents) { when (event) { is TimelineEvents.LoadMore -> { - if(event.backwards) { - localScope.paginateBackwards() - }else{ - //TODO implement pagination forward + localScope.launch { + timelineController.paginate(direction = event.direction) } } is TimelineEvents.SetHighlightedEvent -> highlightedEventId.value = event.eventId is TimelineEvents.OnScrollFinished -> { - if (event.firstIndex == 0) { - newItemState.value = NewEventState.None + if (isLive) { + if (event.firstIndex == 0) { + newEventState.value = NewEventState.None + } + appScope.sendReadReceiptIfNeeded( + firstVisibleIndex = event.firstIndex, + timelineItems = timelineItems, + lastReadReceiptId = lastReadReceiptId, + readReceiptType = if (isSendPublicReadReceiptsEnabled) ReceiptType.READ else ReceiptType.READ_PRIVATE, + ) + } else { + newEventState.value = NewEventState.None } - appScope.sendReadReceiptIfNeeded( - firstVisibleIndex = event.firstIndex, - timelineItems = timelineItems, - lastReadReceiptId = lastReadReceiptId, - readReceiptType = if (isSendPublicReadReceiptsEnabled) ReceiptType.READ else ReceiptType.READ_PRIVATE, - ) } is TimelineEvents.PollAnswerSelected -> appScope.launch { sendPollResponseAction.execute( @@ -126,28 +137,55 @@ class TimelinePresenter @AssistedInject constructor( pollStartId = event.pollStartId, ) } - is TimelineEvents.PollEditClicked -> + is TimelineEvents.PollEditClicked -> { navigator.onEditPollClicked(event.pollStartId) + } + is TimelineEvents.FocusOnEvent -> localScope.launch { + focusedEventId.value = event.eventId + if (timelineItemIndexer.isKnown(event.eventId)) { + val index = timelineItemIndexer.indexOf(event.eventId) + focusRequestState.value = FocusRequestState.Cached(index) + } else { + focusRequestState.value = FocusRequestState.Fetching + timelineController.focusOnEvent(event.eventId) + .fold( + onSuccess = { + focusRequestState.value = FocusRequestState.None + }, + onFailure = { + focusRequestState.value = FocusRequestState.Failure(it) + } + ) + } + } + is TimelineEvents.ClearFocusRequestState -> { + focusRequestState.value = FocusRequestState.None + } + is TimelineEvents.JumpToLive -> { + localScope.launch { + timelineController.focusOnLive() + } + } } } + // Makes sure to get back to live when there is nothing more to load forwards + LaunchedEffect(isLive) { + + } + LaunchedEffect(timelineItems.size) { - computeNewItemState(timelineItems, prevMostRecentItemId, newItemState) + computeNewItemState(timelineItems, prevMostRecentItemId, newEventState) } LaunchedEffect(Unit) { - combine(timeline.timelineItems, room.membersStateFlow) { items, membersState -> + combine(timelineController.timelineItems(), room.membersStateFlow) { items, membersState -> timelineItemsFactory.replaceWith( timelineItems = items, roomMembers = membersState.roomMembers().orEmpty() ) items } - .onEach { timelineItems -> - if (timelineItems.isEmpty()) { - paginateBackwards() - } - } .onEach(redactedVoiceMessageManager::onEachMatrixTimelineItem) .launchIn(this) } @@ -165,10 +203,12 @@ class TimelinePresenter @AssistedInject constructor( return TimelineState( timelineRoomInfo = timelineRoomInfo, highlightedEventId = highlightedEventId.value, - backPaginationStatus = paginationState, timelineItems = timelineItems, renderReadReceipts = renderReadReceipts, - newEventState = newItemState.value, + newEventState = newEventState.value, + isLive = isLive, + focusedEventId = focusedEventId.value, + focusRequestState = focusRequestState.value, eventSink = { handleEvents(it) } ) } @@ -194,6 +234,7 @@ class TimelinePresenter @AssistedInject constructor( newMostRecentItem is TimelineItem.Event && newMostRecentItem.origin != TimelineItemEventOrigin.PAGINATION && newMostRecentItemId != prevMostRecentItemIdValue + if (hasNewEvent) { val newMostRecentEvent = newMostRecentItem as? TimelineItem.Event // Scroll to bottom if the new event is from me, even if sent from another device @@ -221,7 +262,7 @@ class TimelinePresenter @AssistedInject constructor( val eventId = getLastEventIdBeforeOrAt(firstVisibleIndex, timelineItems) if (eventId != null && eventId != lastReadReceiptId.value) { lastReadReceiptId.value = eventId - timeline.sendReadReceipt(eventId = eventId, receiptType = readReceiptType) + //timeline.sendReadReceipt(eventId = eventId, receiptType = readReceiptType) } } } @@ -235,8 +276,4 @@ class TimelinePresenter @AssistedInject constructor( } return null } - - private fun CoroutineScope.paginateBackwards() = launch { - timeline.paginateBackwards() - } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt index 650b1874b8..c7a077a721 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt @@ -20,7 +20,6 @@ import androidx.compose.runtime.Immutable import io.element.android.features.messages.impl.timeline.model.NewEventState import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.timeline.Timeline import kotlinx.collections.immutable.ImmutableList @Immutable @@ -29,11 +28,20 @@ data class TimelineState( val timelineRoomInfo: TimelineRoomInfo, val renderReadReceipts: Boolean, val highlightedEventId: EventId?, - val backPaginationStatus: Timeline.PaginationStatus, val newEventState: NewEventState, - val eventSink: (TimelineEvents) -> Unit + val isLive: Boolean, + val focusedEventId : EventId?, + val focusRequestState: FocusRequestState, + val eventSink: (TimelineEvents) -> Unit, ) +sealed interface FocusRequestState { + data object None : FocusRequestState + data class Cached(val index: Int): FocusRequestState + data object Fetching : FocusRequestState + data class Failure(val throwable: Throwable) : FocusRequestState +} + @Immutable data class TimelineRoomInfo( val isDm: Boolean, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index 19513f08fe..201c12837a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -46,17 +46,18 @@ import kotlin.random.Random fun aTimelineState( timelineItems: ImmutableList = persistentListOf(), - paginationState: Timeline.PaginationStatus = aPaginationStatus(), renderReadReceipts: Boolean = false, timelineRoomInfo: TimelineRoomInfo = aTimelineRoomInfo(), eventSink: (TimelineEvents) -> Unit = {}, ) = TimelineState( timelineItems = timelineItems, timelineRoomInfo = timelineRoomInfo, - backPaginationStatus = paginationState, renderReadReceipts = renderReadReceipts, highlightedEventId = null, newEventState = NewEventState.None, + isLive = true, + focusedEventId = null, + focusRequestState = FocusRequestState.None, eventSink = eventSink, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 1eab2fd2a3..e3dfa248ad 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -19,6 +19,7 @@ package io.element.android.features.messages.impl.timeline import android.view.accessibility.AccessibilityManager +import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.tween @@ -55,7 +56,6 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.messages.impl.timeline.components.TimelineItemRow -import io.element.android.features.messages.impl.timeline.components.virtual.TimelineLoadingMoreIndicator import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.di.aFakeTimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.model.NewEventState @@ -63,8 +63,9 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContentProvider import io.element.android.features.messages.impl.typing.TypingNotificationState -import io.element.android.features.messages.impl.typing.TypingNotificationView import io.element.android.features.messages.impl.typing.aTypingNotificationState +import io.element.android.libraries.designsystem.components.ProgressDialog +import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.FloatingActionButton @@ -73,6 +74,8 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.launch +import timber.log.Timber +import kotlin.math.abs @Composable fun TimelineView( @@ -92,6 +95,10 @@ fun TimelineView( forceJumpToBottomVisibility: Boolean = false ) { + fun clearFocusRequestState() { + state.eventSink(TimelineEvents.ClearFocusRequestState) + } + fun onScrollFinishedAt(firstVisibleIndex: Int) { state.eventSink(TimelineEvents.OnScrollFinished(firstVisibleIndex)) } @@ -109,6 +116,10 @@ fun TimelineView( // TODO implement this logic once we have support to 'jump to event X' in sliding sync } + LaunchedEffect(key1 = state.timelineItems) { + Timber.d("TimelineView - timelineItem identifiers: ${state.timelineItems.joinToString(", ") { it.identifier() }}") + } + // Animate alpha when timeline is first displayed, to avoid flashes or glitching when viewing rooms AnimatedVisibility(visible = true, enter = fadeIn()) { Box(modifier) { @@ -118,9 +129,12 @@ fun TimelineView( reverseLayout = useReverseLayout, contentPadding = PaddingValues(vertical = 8.dp), ) { - item { + /* + item(key = UUID.randomUUID()) { TypingNotificationView(state = typingNotificationState) } + + */ items( items = state.timelineItems, contentType = { timelineItem -> timelineItem.contentType() }, @@ -149,30 +163,68 @@ fun TimelineView( } } + FocusRequestStateView( + focusRequestState = state.focusRequestState, + onClearFocusRequestState = ::clearFocusRequestState + ) + TimelineScrollHelper( isTimelineEmpty = state.timelineItems.isEmpty(), lazyListState = lazyListState, forceJumpToBottomVisibility = forceJumpToBottomVisibility, newEventState = state.newEventState, - onScrollFinishedAt = ::onScrollFinishedAt + isLive = state.isLive, + focusRequestState = state.focusRequestState, + onScrollFinishedAt = ::onScrollFinishedAt, + onClearFocusRequestState = ::clearFocusRequestState, + onJumpToLive = { state.eventSink(TimelineEvents.JumpToLive) }, ) } } } +@Composable +private fun FocusRequestStateView( + focusRequestState: FocusRequestState, + onClearFocusRequestState: () -> Unit, + modifier: Modifier = Modifier, +) { + BackHandler(enabled = focusRequestState is FocusRequestState.Fetching) { + onClearFocusRequestState() + } + + when (focusRequestState) { + is FocusRequestState.Failure -> { + ErrorDialog( + content = stringResource(id = CommonStrings.common_failed), + onDismiss = onClearFocusRequestState, + modifier = modifier, + ) + } + FocusRequestState.Fetching -> { + ProgressDialog(modifier = modifier) + } + is FocusRequestState.Cached, FocusRequestState.None -> Unit + } +} + @Composable private fun BoxScope.TimelineScrollHelper( isTimelineEmpty: Boolean, lazyListState: LazyListState, newEventState: NewEventState, + isLive: Boolean, forceJumpToBottomVisibility: Boolean, + focusRequestState: FocusRequestState, + onClearFocusRequestState: () -> Unit, onScrollFinishedAt: (Int) -> Unit, + onJumpToLive: () -> Unit, ) { val coroutineScope = rememberCoroutineScope() val isScrollFinished by remember { derivedStateOf { !lazyListState.isScrollInProgress } } val canAutoScroll by remember { derivedStateOf { - lazyListState.firstVisibleItemIndex < 3 + lazyListState.firstVisibleItemIndex < 3 && isLive } } @@ -186,9 +238,29 @@ private fun BoxScope.TimelineScrollHelper( } } + fun jumpToBottom() { + if (isLive) { + scrollToBottom() + } else { + onJumpToLive() + } + } + + LaunchedEffect(key1 = focusRequestState) { + if (focusRequestState is FocusRequestState.Cached) { + if (abs(lazyListState.firstVisibleItemIndex - focusRequestState.index) < 10) { + lazyListState.animateScrollToItem(focusRequestState.index) + } else { + lazyListState.scrollToItem(focusRequestState.index) + } + onClearFocusRequestState() + } + } + LaunchedEffect(canAutoScroll, newEventState) { - val shouldAutoScroll = isScrollFinished && (canAutoScroll || newEventState == NewEventState.FromMe) - if (shouldAutoScroll) { + Timber.d("TimelineScrollHelper - canAutoScroll: $canAutoScroll, newEventState: $newEventState") + val shouldScrollToBottom = isScrollFinished && (canAutoScroll || newEventState == NewEventState.FromMe) + if (shouldScrollToBottom) { scrollToBottom() } } @@ -203,11 +275,11 @@ private fun BoxScope.TimelineScrollHelper( JumpToBottomButton( // Use inverse of canAutoScroll otherwise we might briefly see the before the scroll animation is triggered - isVisible = !canAutoScroll || forceJumpToBottomVisibility, + isVisible = !canAutoScroll || forceJumpToBottomVisibility || !isLive, modifier = Modifier - .align(Alignment.BottomEnd) - .padding(end = 24.dp, bottom = 12.dp), - onClick = ::scrollToBottom, + .align(Alignment.BottomEnd) + .padding(end = 24.dp, bottom = 12.dp), + onClick = { jumpToBottom() }, ) } @@ -233,8 +305,8 @@ private fun JumpToBottomButton( ) { Icon( modifier = Modifier - .size(24.dp) - .rotate(90f), + .size(24.dp) + .rotate(90f), imageVector = CompoundIcons.ArrowRight(), contentDescription = stringResource(id = CommonStrings.a11y_jump_to_bottom) ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt index 9edc7a9ad4..4235c7e065 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline.components +import androidx.compose.foundation.layout.Spacer import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier @@ -29,6 +30,7 @@ import io.element.android.features.messages.impl.timeline.components.virtual.Tim import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemDaySeparatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemEncryptedHistoryBannerVirtualModel +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemInvisibleIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemRoomBeginningModel @@ -46,10 +48,11 @@ fun TimelineItemVirtualRow( is TimelineItemEncryptedHistoryBannerVirtualModel -> TimelineEncryptedHistoryBannerView(modifier) TimelineItemRoomBeginningModel -> TimelineItemRoomBeginningView(roomName = timelineRoomInfo.name, modifier = modifier) is TimelineItemLoadingIndicatorModel -> { - TimelineLoadingMoreIndicator() + TimelineLoadingMoreIndicator(modifier) LaunchedEffect(key1 = virtual.model.timestamp) { - eventSink(TimelineEvents.LoadMore(virtual.model.backwards)) + eventSink(TimelineEvents.LoadMore(virtual.model.direction)) } } + TimelineItemInvisibleIndicatorModel -> Spacer(modifier = modifier) } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt index 23cc516156..cf5c54f3d4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt @@ -18,6 +18,7 @@ package io.element.android.features.messages.impl.timeline.components.virtual import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.runtime.Composable @@ -26,19 +27,19 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator +import io.element.android.libraries.designsystem.theme.components.LinearProgressIndicator @Composable internal fun TimelineLoadingMoreIndicator(modifier: Modifier = Modifier) { Box( - modifier + modifier = modifier .fillMaxWidth() - .wrapContentHeight() - .padding(8.dp), + .padding(2.dp), contentAlignment = Alignment.Center, ) { - CircularProgressIndicator( - strokeWidth = 2.dp, + LinearProgressIndicator(modifier = Modifier + .height(1.dp) + .fillMaxWidth() ) } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt index 29ea3abcfc..34049fbaf7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt @@ -19,6 +19,7 @@ package io.element.android.features.messages.impl.timeline.factories import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.collectAsState +import io.element.android.features.messages.impl.timeline.TimelineItemIndexer import io.element.android.features.messages.impl.timeline.diff.TimelineItemsCacheInvalidator import io.element.android.features.messages.impl.timeline.factories.event.TimelineItemEventFactory import io.element.android.features.messages.impl.timeline.factories.virtual.TimelineItemVirtualFactory @@ -33,6 +34,7 @@ import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext @@ -43,9 +45,9 @@ class TimelineItemsFactory @Inject constructor( private val eventItemFactory: TimelineItemEventFactory, private val virtualItemFactory: TimelineItemVirtualFactory, private val timelineItemGrouper: TimelineItemGrouper, + private val timelineItemIndexer: TimelineItemIndexer, ) { private val timelineItems = MutableStateFlow(persistentListOf()) - private val lock = Mutex() private val diffCache = MutableListDiffCache() private val diffCacheUpdater = DiffCacheUpdater( @@ -60,6 +62,10 @@ class TimelineItemsFactory @Inject constructor( } } + fun items(): StateFlow> { + return timelineItems + } + @Composable fun collectItemsAsState(): State> { return timelineItems.collectAsState() @@ -80,6 +86,7 @@ class TimelineItemsFactory @Inject constructor( roomMembers: List, ) { val newTimelineItemStates = ArrayList() + val newTimelineById = mutableMapOf() for (index in diffCache.indices().reversed()) { val cacheItem = diffCache.get(index) if (cacheItem == null) { @@ -96,10 +103,12 @@ class TimelineItemsFactory @Inject constructor( } else { cacheItem } + newTimelineById[updatedItem.identifier()] = updatedItem newTimelineItemStates.add(updatedItem) } } val result = timelineItemGrouper.group(newTimelineItemStates).toPersistentList() + timelineItemIndexer.process(result) this.timelineItems.emit(result) } @@ -108,13 +117,13 @@ class TimelineItemsFactory @Inject constructor( index: Int, roomMembers: List, ): TimelineItem? { - val timelineItemState = + val timelineItem = when (val currentTimelineItem = timelineItems[index]) { is MatrixTimelineItem.Event -> eventItemFactory.create(currentTimelineItem, index, timelineItems, roomMembers) is MatrixTimelineItem.Virtual -> virtualItemFactory.create(currentTimelineItem) MatrixTimelineItem.Other -> null } - diffCache[index] = timelineItemState - return timelineItemState + diffCache[index] = timelineItem + return timelineItem } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt index 2efe98e5b3..e6df9e889d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt @@ -18,6 +18,7 @@ package io.element.android.features.messages.impl.timeline.factories.virtual import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemEncryptedHistoryBannerVirtualModel +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemInvisibleIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemRoomBeginningModel @@ -45,9 +46,10 @@ class TimelineItemVirtualFactory @Inject constructor( is VirtualTimelineItem.EncryptedHistoryBanner -> TimelineItemEncryptedHistoryBannerVirtualModel is VirtualTimelineItem.RoomBeginning -> TimelineItemRoomBeginningModel is VirtualTimelineItem.LoadingIndicator -> TimelineItemLoadingIndicatorModel( - backwards = inner.backwards, + direction = inner.direction, timestamp = inner.timestamp ) + VirtualTimelineItem.LatestKnownEventIndicator -> TimelineItemInvisibleIndicatorModel } } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustDetachedTimeline.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemInvisibleIndicatorModel.kt similarity index 73% rename from libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustDetachedTimeline.kt rename to features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemInvisibleIndicatorModel.kt index 5d45f5d44f..2f4a118746 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustDetachedTimeline.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemInvisibleIndicatorModel.kt @@ -14,7 +14,8 @@ * limitations under the License. */ -package io.element.android.libraries.matrix.impl.timeline +package io.element.android.features.messages.impl.timeline.model.virtual -class RustDetachedTimeline { +data object TimelineItemInvisibleIndicatorModel : TimelineItemVirtualModel { + override val type: String = "TimelineItemInvisibleIndicatorModel" } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingIndicatorModel.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingIndicatorModel.kt index 7007c56e0f..da022d6d59 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingIndicatorModel.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLoadingIndicatorModel.kt @@ -16,8 +16,10 @@ package io.element.android.features.messages.impl.timeline.model.virtual +import io.element.android.libraries.matrix.api.timeline.Timeline + data class TimelineItemLoadingIndicatorModel( - val backwards: Boolean, + val direction: Timeline.PaginationDirection, val timestamp: Long, ) : TimelineItemVirtualModel { override val type: String = "TimelineItemLoadingIndicatorModel" diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt index 339f02af31..b36359aa25 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt @@ -50,7 +50,7 @@ class PollHistoryPresenter @Inject constructor( override fun present(): PollHistoryState { // TODO use room.rememberPollHistory() when working properly? val timeline = room.liveTimeline - val paginationState by timeline.backPaginationStatus.collectAsState() + val paginationState by timeline.paginationStatus(Timeline.PaginationDirection.BACKWARDS).collectAsState() val pollHistoryItemsFlow = remember { timeline.timelineItems.map { items -> pollHistoryItemFactory.create(items) @@ -96,6 +96,6 @@ class PollHistoryPresenter @Inject constructor( } private fun CoroutineScope.loadMore(pollHistory: Timeline) = launch { - pollHistory.paginateBackwards() + pollHistory.paginate(Timeline.PaginationDirection.BACKWARDS) } } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 8e32a51a5c..a2ca077bb8 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -32,7 +32,7 @@ import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange -import io.element.android.libraries.matrix.api.timeline.LiveTimeline +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings @@ -98,7 +98,9 @@ interface MatrixRoom : Closeable { val syncUpdateFlow: StateFlow - val liveTimeline: LiveTimeline + val liveTimeline: Timeline + + suspend fun timelineFocusedOnEvent(eventId: EventId): Timeline fun destroy() diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/DetachedTimeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/DetachedTimeline.kt deleted file mode 100644 index d6abdc515f..0000000000 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/DetachedTimeline.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.api.timeline - -import kotlinx.coroutines.flow.StateFlow - -interface DetachedTimeline : Timeline { - suspend fun paginateForwards(): Result - val forwardPaginationStatus: StateFlow -} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/LiveTimeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/LiveTimeline.kt deleted file mode 100644 index 643b690eee..0000000000 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/LiveTimeline.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.api.timeline - -import io.element.android.libraries.matrix.api.core.EventId -import kotlinx.coroutines.flow.Flow - -interface LiveTimeline: Timeline { - val membershipChangeEventReceived: Flow - suspend fun sendReadReceipt(eventId: EventId, receiptType: ReceiptType): Result -} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt index c0f8110e56..05b1549ae1 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.api.timeline +import io.element.android.libraries.matrix.api.core.EventId import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow @@ -28,7 +29,14 @@ interface Timeline : AutoCloseable { val canPaginate: Boolean = !isPaginating && hasMoreToLoad } - suspend fun paginateBackwards(): Result - val backPaginationStatus: StateFlow + enum class PaginationDirection { + BACKWARDS, + FORWARDS + } + + val membershipChangeEventReceived: Flow + suspend fun sendReadReceipt(eventId: EventId, receiptType: ReceiptType): Result + suspend fun paginate(direction: PaginationDirection): Result + fun paginationStatus(direction: PaginationDirection): StateFlow val timelineItems: Flow> } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt index fbe2a09716..2879225553 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt @@ -16,6 +16,8 @@ package io.element.android.libraries.matrix.api.timeline.item.virtual +import io.element.android.libraries.matrix.api.timeline.Timeline + sealed interface VirtualTimelineItem { data class DayDivider( val timestamp: Long @@ -27,8 +29,10 @@ sealed interface VirtualTimelineItem { data object RoomBeginning: VirtualTimelineItem + data object LatestKnownEventIndicator: VirtualTimelineItem + data class LoadingIndicator( - val backwards: Boolean, + val direction: Timeline.PaginationDirection, val timestamp: Long, ): VirtualTimelineItem } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 03f14eef7a..147ca3f2da 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -43,7 +43,7 @@ import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange import io.element.android.libraries.matrix.api.room.roomNotificationSettings -import io.element.android.libraries.matrix.api.timeline.LiveTimeline +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings @@ -57,7 +57,7 @@ import io.element.android.libraries.matrix.impl.room.location.toInner import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper import io.element.android.libraries.matrix.impl.room.powerlevels.RoomPowerLevelsMapper -import io.element.android.libraries.matrix.impl.timeline.RustLiveTimeline +import io.element.android.libraries.matrix.impl.timeline.RustTimeline import io.element.android.libraries.matrix.impl.timeline.toRustReceiptType import io.element.android.libraries.matrix.impl.util.mxCallbackFlow import io.element.android.libraries.matrix.impl.widget.RustWidgetDriver @@ -160,7 +160,7 @@ class RustMatrixRoom( private val _roomNotificationSettingsStateFlow = MutableStateFlow(MatrixRoomNotificationSettingsState.Unknown) override val roomNotificationSettingsStateFlow: StateFlow = _roomNotificationSettingsStateFlow - override val liveTimeline = createLiveTimeline(innerTimeline){ + override val liveTimeline = createTimeline(innerTimeline, isLive = true){ _syncUpdateFlow.value = systemClock.epochMillis() } @@ -183,6 +183,12 @@ class RustMatrixRoom( override suspend fun unsubscribeFromSync() = roomSyncSubscriber.unsubscribe(roomId) + override suspend fun timelineFocusedOnEvent(eventId: EventId): Timeline { + return innerRoom.timelineFocusedOnEvent(eventId.value, numContextEvents = 50u).let {inner -> + createTimeline(inner, isLive = false){} + } + } + override fun destroy() { roomCoroutineScope.cancel() liveTimeline.close() @@ -745,12 +751,14 @@ class RustMatrixRoom( } } - private fun createLiveTimeline( + private fun createTimeline( timeline: InnerTimeline, + isLive: Boolean = true, onNewSyncedEvent: () -> Unit = {}, - ): LiveTimeline { - return RustLiveTimeline( + ): Timeline { + return RustTimeline( isKeyBackupEnabled = isKeyBackupEnabled, + isLive = isLive, matrixRoom = this, systemClock = systemClock, roomCoroutineScope = roomCoroutineScope, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt deleted file mode 100644 index b6f4284bc8..0000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.impl.timeline - -import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.ReceiptType -import io.element.android.libraries.matrix.api.timeline.TimelineException -import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessageMapper -import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper -import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper -import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper -import io.element.android.libraries.matrix.impl.timeline.postprocessor.RoomBeginningPostProcessor -import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor -import kotlinx.coroutines.CompletableDeferred -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.coroutineScope -import kotlinx.coroutines.ensureActive -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.mapLatest -import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import org.matrix.rustcomponents.sdk.PaginationOptions -import org.matrix.rustcomponents.sdk.Timeline -import org.matrix.rustcomponents.sdk.TimelineDiff -import org.matrix.rustcomponents.sdk.TimelineItem -import timber.log.Timber -import uniffi.matrix_sdk_ui.EventItemOrigin -import java.util.Date -import java.util.concurrent.atomic.AtomicBoolean - -private const val INITIAL_MAX_SIZE = 50 - diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustLiveTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt similarity index 73% rename from libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustLiveTimeline.kt rename to libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 5ff770b053..13a8e40161 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustLiveTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -18,7 +18,6 @@ package io.element.android.libraries.matrix.impl.timeline import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.timeline.LiveTimeline import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.Timeline @@ -27,6 +26,7 @@ import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessage import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper +import io.element.android.libraries.matrix.impl.timeline.postprocessor.InvisibleIndicatorPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.LoadingIndicatorsPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.RoomBeginningPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor @@ -42,6 +42,7 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach @@ -58,8 +59,9 @@ import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline private const val INITIAL_MAX_SIZE = 50 -class RustLiveTimeline( +class RustTimeline( private val inner: InnerTimeline, + private val isLive: Boolean, private val systemClock: SystemClock, private val roomCoroutineScope: CoroutineScope, private val isKeyBackupEnabled: Boolean, @@ -68,7 +70,7 @@ class RustLiveTimeline( private val lastLoginTimestamp: Date?, private val fetchDetailsForEvent: suspend (EventId) -> Result, private val onNewSyncedEvent: () -> Unit, -) : LiveTimeline { +) : Timeline { private val initLatch = CompletableDeferred() private val isInit = AtomicBoolean(false) @@ -85,6 +87,7 @@ class RustLiveTimeline( private val roomBeginningPostProcessor = RoomBeginningPostProcessor() private val loadingIndicatorsPostProcessor = LoadingIndicatorsPostProcessor(systemClock) + private val invisibleIndicatorPostProcessor = InvisibleIndicatorPostProcessor(isLive) private val timelineItemFactory = MatrixTimelineItemMapper( fetchDetailsForEvent = fetchDetailsForEvent, @@ -127,35 +130,59 @@ class RustLiveTimeline( } } - override suspend fun paginateBackwards(): Result { + override suspend fun paginate(direction: Timeline.PaginationDirection): Result { initLatch.await() return runCatching { - if (!canBackPaginate()) throw TimelineException.CannotPaginate - inner.paginateBackwards() + if (!canPaginate(direction)) throw TimelineException.CannotPaginate + when (direction) { + Timeline.PaginationDirection.BACKWARDS -> inner.paginateBackwards(50u) + Timeline.PaginationDirection.FORWARDS -> inner.paginateForwards(50u) + } }.onFailure { error -> if (error is TimelineException.CannotPaginate) { - Timber.d("Can't paginate backwards on room ${matrixRoom.roomId} with backPaginationStatus: ${backPaginationStatus.value}") + Timber.d("Can't paginate $direction on room ${matrixRoom.roomId} with paginationStatus: ${backPaginationStatus.value}") } else { - Timber.e(error, "Error paginating backwards on room ${matrixRoom.roomId}") + Timber.e(error, "Error paginating $direction on room ${matrixRoom.roomId}") } }.onSuccess { - Timber.v("Success back paginating for room ${matrixRoom.roomId}") + Timber.v("Success paginating $direction for room ${matrixRoom.roomId}") } } - private fun canBackPaginate(): Boolean { - return isInit.get() && backPaginationStatus.value.canPaginate + private fun canPaginate(direction: Timeline.PaginationDirection): Boolean { + if (!isInit.get()) return false + return when (direction) { + Timeline.PaginationDirection.BACKWARDS -> backPaginationStatus.value.canPaginate + Timeline.PaginationDirection.FORWARDS -> forwardPaginationStatus.value.canPaginate + } } - override val backPaginationStatus: StateFlow = inner + override fun paginationStatus(direction: Timeline.PaginationDirection): StateFlow { + return when (direction) { + Timeline.PaginationDirection.BACKWARDS -> backPaginationStatus + Timeline.PaginationDirection.FORWARDS -> forwardPaginationStatus + } + } + + private val backPaginationStatus: StateFlow = inner .backPaginationStatusFlow() .map() .stateIn(roomCoroutineScope, SharingStarted.Eagerly, Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = true)) + private val forwardPaginationStatus: StateFlow = + when (isLive) { + true -> MutableStateFlow(Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = false)) + false -> inner + .forwardPaginationStatusFlow() + .map() + .stateIn(roomCoroutineScope, SharingStarted.Eagerly, Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = true)) + } + override val timelineItems: Flow> = combine( _timelineItems, - backPaginationStatus.map { it.hasMoreToLoad }.distinctUntilChanged() - ) { timelineItems, hasMoreToLoadBackward -> + backPaginationStatus.map { it.hasMoreToLoad }.distinctUntilChanged(), + forwardPaginationStatus.map { it.hasMoreToLoad }.distinctUntilChanged(), + ) { timelineItems, hasMoreToLoadBackward, hasMoreToLoadForward -> timelineItems .let { items -> encryptedHistoryPostProcessor.process(items) } .let { items -> @@ -164,7 +191,8 @@ class RustLiveTimeline( isDm = matrixRoom.isDm, hasMoreToLoadBackwards = hasMoreToLoadBackward ) - }.let {items -> loadingIndicatorsPostProcessor.process(items, hasMoreToLoadBackward)} + }.let { items -> loadingIndicatorsPostProcessor.process(items, hasMoreToLoadBackward, hasMoreToLoadForward) } + .let { items -> invisibleIndicatorPostProcessor.process(items) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/InvisibleIndicatorPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/InvisibleIndicatorPostProcessor.kt new file mode 100644 index 0000000000..7c7f819ed7 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/InvisibleIndicatorPostProcessor.kt @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.timeline.postprocessor + +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem + +class InvisibleIndicatorPostProcessor( + private val isLive: Boolean, +) { + private val latestEventIdentifiers: MutableSet = HashSet() + + fun process( + items: List, + ): List { + if (isLive) { + return items + } else { + return buildList { + items.forEach { item -> + add(item) + if (item is MatrixTimelineItem.Event) { + if (latestEventIdentifiers.contains(item.uniqueId)) { + add(createLatestKnownEventIndicator(item.uniqueId)) + } + } + } + items.latestEventIdentifier()?.let { latestEventIdentifier -> + if (latestEventIdentifiers.add(latestEventIdentifier)) { + add(createLatestKnownEventIndicator(latestEventIdentifier)) + } + } + } + } + } + + private fun createLatestKnownEventIndicator(identifier: String): MatrixTimelineItem { + return MatrixTimelineItem.Virtual( + uniqueId = "latest_known_event_$identifier", + virtual = VirtualTimelineItem.LatestKnownEventIndicator + ) + } + + private fun List.latestEventIdentifier(): String? { + return findLast { + when (it) { + is MatrixTimelineItem.Event -> true + else -> false + } + }?.let { + (it as MatrixTimelineItem.Event).uniqueId + } + } + + private fun List.indexOf(identifier: String): Int { + return indexOfLast { + when (it) { + is MatrixTimelineItem.Event -> { + it.uniqueId == identifier + } + else -> false + } + } + } +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt index 2d08c8e5b8..c2db96730b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt @@ -17,6 +17,7 @@ package io.element.android.libraries.matrix.impl.timeline.postprocessor import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem import io.element.android.services.toolbox.api.systemclock.SystemClock @@ -24,21 +25,34 @@ class LoadingIndicatorsPostProcessor(private val systemClock: SystemClock) { fun process( items: List, - hasMoreToLoadBackwards: Boolean, + hasMoreToLoadBackward: Boolean, + hasMoreToLoadForward: Boolean, ): List { - return if (hasMoreToLoadBackwards && !items.hasEncryptionHistoryBanner()){ - listOf( - MatrixTimelineItem.Virtual( - uniqueId = "BackwardLoadingIndicator", - virtual = VirtualTimelineItem.LoadingIndicator( - backwards = true, - timestamp = systemClock.epochMillis() - ) + val shouldAddBackwardLoadingIndicator = hasMoreToLoadBackward && !items.hasEncryptionHistoryBanner() + val shouldAddForwardLoadingIndicator = hasMoreToLoadForward && items.isNotEmpty() + val currentTimestamp = systemClock.epochMillis() + return buildList { + if (shouldAddBackwardLoadingIndicator) { + val backwardLoadingIndicator = MatrixTimelineItem.Virtual( + uniqueId = "BackwardLoadingIndicator", + virtual = VirtualTimelineItem.LoadingIndicator( + direction = Timeline.PaginationDirection.BACKWARDS, + timestamp = currentTimestamp + ) ) - ) + items - }else { - items - } + add(backwardLoadingIndicator) + } + addAll(items) + if (shouldAddForwardLoadingIndicator) { + val forwardLoadingIndicator = MatrixTimelineItem.Virtual( + uniqueId = "ForwardLoadingIndicator", + virtual = VirtualTimelineItem.LoadingIndicator( + direction = Timeline.PaginationDirection.FORWARDS, + timestamp = currentTimestamp + ) + ) + add(forwardLoadingIndicator) + } + } } - } From d06ec9099b4bef51b6911852826c0a912b26427c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Apr 2024 13:28:37 +0200 Subject: [PATCH 127/289] Add Ui test on DeveloperSettingsView --- .../DeveloperSettingsStateProvider.kt | 32 +++-- .../developer/DeveloperSettingsViewTest.kt | 127 ++++++++++++++++++ .../preferences/PreferenceTextField.kt | 5 +- 3 files changed, 153 insertions(+), 11 deletions(-) create mode 100644 features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsViewTest.kt diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsStateProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsStateProvider.kt index e4643182f4..fb93a63ffc 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsStateProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsStateProvider.kt @@ -25,22 +25,36 @@ open class DeveloperSettingsStateProvider : PreviewParameterProvider get() = sequenceOf( aDeveloperSettingsState(), - aDeveloperSettingsState().copy(clearCacheAction = AsyncData.Loading()), - aDeveloperSettingsState().copy( - customElementCallBaseUrlState = CustomElementCallBaseUrlState( + aDeveloperSettingsState( + clearCacheAction = AsyncData.Loading() + ), + aDeveloperSettingsState( + customElementCallBaseUrlState = aCustomElementCallBaseUrlState( baseUrl = "https://call.element.ahoy", - defaultUrl = "https://call.element.io", - validator = { true } ) ), ) } -fun aDeveloperSettingsState() = DeveloperSettingsState( +fun aDeveloperSettingsState( + clearCacheAction: AsyncData = AsyncData.Uninitialized, + customElementCallBaseUrlState: CustomElementCallBaseUrlState = aCustomElementCallBaseUrlState(), + eventSink: (DeveloperSettingsEvents) -> Unit = {}, +) = DeveloperSettingsState( features = aFeatureUiModelList(), rageshakeState = aRageshakePreferencesState(), cacheSize = AsyncData.Success("1.2 MB"), - clearCacheAction = AsyncData.Uninitialized, - customElementCallBaseUrlState = CustomElementCallBaseUrlState(baseUrl = null, defaultUrl = "https://call.element.io", validator = { true }), - eventSink = {} + clearCacheAction = clearCacheAction, + customElementCallBaseUrlState = customElementCallBaseUrlState, + eventSink = eventSink, +) + +fun aCustomElementCallBaseUrlState( + baseUrl: String? = null, + defaultUrl: String = "https://call.element.io", + validator: (String?) -> Boolean = { true }, +) = CustomElementCallBaseUrlState( + baseUrl = baseUrl, + defaultUrl = defaultUrl, + validator = validator, ) diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsViewTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsViewTest.kt new file mode 100644 index 0000000000..ea120a27c1 --- /dev/null +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsViewTest.kt @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.preferences.impl.developer + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.preferences.impl.R +import io.element.android.libraries.ui.strings.CommonStrings +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import io.element.android.tests.testutils.pressBack +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith +import org.robolectric.annotation.Config + +@RunWith(AndroidJUnit4::class) +class DeveloperSettingsViewTest { + @get:Rule + val rule = createAndroidComposeRule() + + @Test + fun `clicking on back invokes the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setDeveloperSettingsView( + state = aDeveloperSettingsState( + eventSink = eventsRecorder + ), + onBackPressed = it + ) + rule.pressBack() + } + } + + @Test + fun `clicking on element call url open the dialogs and submit emits the expected event`() { + val eventsRecorder = EventsRecorder() + rule.setDeveloperSettingsView( + state = aDeveloperSettingsState( + eventSink = eventsRecorder + ), + ) + rule.clickOn(R.string.screen_advanced_settings_element_call_base_url) + rule.clickOn(CommonStrings.action_ok) + eventsRecorder.assertSingle(DeveloperSettingsEvents.SetCustomElementCallBaseUrl("https://call.element.io")) + } + + @Config(qualifiers = "h1024dp") + @Test + fun `clicking on open showkase invokes the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setDeveloperSettingsView( + state = aDeveloperSettingsState( + eventSink = eventsRecorder + ), + onOpenShowkase = it + ) + rule.onNodeWithText("Open Showkase browser").performClick() + } + } + + @Test + fun `clicking on configure tracing invokes the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setDeveloperSettingsView( + state = aDeveloperSettingsState( + eventSink = eventsRecorder + ), + onOpenConfigureTracing = it + ) + rule.onNodeWithText("Configure tracing").performClick() + } + } + + @Config(qualifiers = "h1024dp") + @Test + fun `clicking on clear cache emits the expected event`() { + val eventsRecorder = EventsRecorder() + rule.setDeveloperSettingsView( + state = aDeveloperSettingsState( + eventSink = eventsRecorder + ), + ) + rule.onNodeWithText("Clear cache").performClick() + eventsRecorder.assertSingle(DeveloperSettingsEvents.ClearCache) + } +} + +private fun AndroidComposeTestRule.setDeveloperSettingsView( + state: DeveloperSettingsState, + onOpenShowkase: () -> Unit = EnsureNeverCalled(), + onOpenConfigureTracing: () -> Unit = EnsureNeverCalled(), + onBackPressed: () -> Unit = EnsureNeverCalled() +) { + setContent { + DeveloperSettingsView( + state = state, + onOpenShowkase = onOpenShowkase, + onOpenConfigureTracing = onOpenConfigureTracing, + onBackPressed = onBackPressed, + ) + } +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceTextField.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceTextField.kt index f616c20a72..5b319e41d8 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceTextField.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceTextField.kt @@ -98,11 +98,11 @@ private fun TextFieldDialog( keyboardOptions: KeyboardOptions = KeyboardOptions.Default, ) { val focusRequester = remember { FocusRequester() } - var textFieldContents by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue(value.orEmpty(), selection = TextRange(value.orEmpty().length))) } var error by rememberSaveable { mutableStateOf(null) } + var canRequestFocus by rememberSaveable { mutableStateOf(false) } val canSubmit by remember { derivedStateOf { validation(textFieldContents.text) } } ListDialog( title = title, @@ -128,10 +128,11 @@ private fun TextFieldDialog( maxLines = maxLines, modifier = Modifier.focusRequester(focusRequester), ) + canRequestFocus = true } } - if (autoSelectOnDisplay) { + if (autoSelectOnDisplay && canRequestFocus) { LaunchedEffect(Unit) { focusRequester.requestFocus() } From c185f0c1c00f02d119e705228e6c1aec197d4f92 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Apr 2024 14:09:32 +0200 Subject: [PATCH 128/289] Format --- .../impl/actionlist/ActionListView.kt | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt index 6b7b611557..2fe6a0cd2b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt @@ -145,8 +145,8 @@ fun ActionListView( onEmojiReactionClicked = ::onEmojiReactionClicked, onCustomReactionClicked = ::onCustomReactionClicked, modifier = Modifier - .navigationBarsPadding() - .imePadding() + .navigationBarsPadding() + .imePadding() ) } } @@ -177,8 +177,8 @@ private fun SheetContent( MessageSummary( event = target.event, modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp) + .fillMaxWidth() + .padding(horizontal = 16.dp) ) Spacer(modifier = Modifier.height(14.dp)) HorizontalDivider() @@ -322,13 +322,13 @@ private fun EmojiReactionsRow( contentDescription = stringResource(id = CommonStrings.a11y_react_with_other_emojis), tint = MaterialTheme.colorScheme.secondary, modifier = Modifier - .size(24.dp) - .clickable( - enabled = true, - onClick = onCustomReactionClicked, - indication = rememberRipple(bounded = false, radius = emojiRippleRadius), - interactionSource = remember { MutableInteractionSource() } - ) + .size(24.dp) + .clickable( + enabled = true, + onClick = onCustomReactionClicked, + indication = rememberRipple(bounded = false, radius = emojiRippleRadius), + interactionSource = remember { MutableInteractionSource() } + ) ) } } @@ -352,11 +352,11 @@ private fun EmojiButton( } Box( modifier = Modifier - .size(48.dp) - .background(backgroundColor, CircleShape) - .clearAndSetSemantics { - contentDescription = description - }, + .size(48.dp) + .background(backgroundColor, CircleShape) + .clearAndSetSemantics { + contentDescription = description + }, contentAlignment = Alignment.Center ) { Text( From b1dd22564815eb303f035ae93e82ce581915f56e Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 23 Apr 2024 13:45:41 +0200 Subject: [PATCH 129/289] Timeline permalink : automatic focus on live when reaching end of forward pagination (and remove usage of PaginationStatus) --- .../impl/timeline/TimelineController.kt | 10 +++- .../impl/timeline/RoomTimelineExtensions.kt | 28 ----------- .../matrix/impl/timeline/RustTimeline.kt | 48 +++++++++++-------- .../matrix/impl/timeline/TimelineFlows.kt | 40 ---------------- 4 files changed, 36 insertions(+), 90 deletions(-) delete mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineFlows.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index e4ae628263..9f98614fac 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -35,11 +35,14 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.onEach import java.util.Optional import javax.inject.Inject import kotlin.coroutines.cancellation.CancellationException +/** + * This controller is responsible of using the right timeline to display messages. + * It can be focused on the live timeline or on a detached timeline (focusing an unknown event). + */ @SingleIn(RoomScope::class) class TimelineController @Inject constructor( private val room: MatrixRoom, @@ -92,6 +95,11 @@ class TimelineController @Inject constructor( suspend fun paginate(direction: Timeline.PaginationDirection): Result { return currentTimelineFlow().first().paginate(direction) + .onSuccess { hasReachedEnd -> + if (direction == Timeline.PaginationDirection.FORWARDS && hasReachedEnd) { + focusOnLive() + } + } } private fun currentTimelineFlow() = combine(liveTimeline, detachedTimeline) { live, detached -> diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt index 400ff8fffd..381bfd8c95 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt @@ -16,10 +16,8 @@ package io.element.android.libraries.matrix.impl.timeline -import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.matrix.impl.util.cancelAndDestroy import io.element.android.libraries.matrix.impl.util.destroyAll -import io.element.android.libraries.matrix.impl.util.mxCallbackFlow import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.channels.trySendBlocking @@ -27,14 +25,11 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.catch -import org.matrix.rustcomponents.sdk.PaginationStatusListener -import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.Timeline import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineItem import org.matrix.rustcomponents.sdk.TimelineListener import timber.log.Timber -import uniffi.matrix_sdk_ui.PaginationStatus internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List) -> Unit): Flow> = callbackFlow { @@ -59,29 +54,6 @@ internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List = - paginationStatusFlow { listener -> - subscribeToBackPaginationStatus(listener) - } - -internal fun Timeline.forwardPaginationStatusFlow(): Flow = - paginationStatusFlow { listener -> - subscribeToForwardPaginationStatus(listener) - } - -private fun paginationStatusFlow(subscriber: suspend (PaginationStatusListener)->TaskHandle): Flow{ - return mxCallbackFlow { - val listener = object : PaginationStatusListener { - override fun onUpdate(status: PaginationStatus) { - trySendBlocking(status) - } - } - tryOrNull { - subscriber(listener) - } - }.buffer(Channel.UNLIMITED) -} - internal suspend fun Timeline.runWithTimelineListenerRegistered(action: suspend () -> Unit) { val result = addListener(NoOpTimelineListener) try { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 13a8e40161..a3c121fd97 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.impl.timeline.postprocessor.LoadingIn import io.element.android.libraries.matrix.impl.timeline.postprocessor.RoomBeginningPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor import io.element.android.services.toolbox.api.systemclock.SystemClock +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -38,15 +39,13 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.matrix.rustcomponents.sdk.TimelineDiff @@ -58,6 +57,7 @@ import java.util.concurrent.atomic.AtomicBoolean import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline private const val INITIAL_MAX_SIZE = 50 +private const val PAGINATION_SIZE = 50 class RustTimeline( private val inner: InnerTimeline, @@ -105,6 +105,14 @@ class RustTimeline( timelineItemFactory = timelineItemFactory, ) + private val backPaginationStatus = MutableStateFlow( + Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = true) + ) + + private val forwardPaginationStatus = MutableStateFlow( + Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = !isLive) + ) + init { roomCoroutineScope.launch(dispatcher) { inner.timelineDiffFlow { initialList -> @@ -130,22 +138,34 @@ class RustTimeline( } } + private fun updatePaginationStatus(direction: Timeline.PaginationDirection, update: (Timeline.PaginationStatus)->Timeline.PaginationStatus){ + when (direction) { + Timeline.PaginationDirection.BACKWARDS -> backPaginationStatus.getAndUpdate(update) + Timeline.PaginationDirection.FORWARDS -> forwardPaginationStatus.getAndUpdate(update) + } + } + override suspend fun paginate(direction: Timeline.PaginationDirection): Result { initLatch.await() return runCatching { if (!canPaginate(direction)) throw TimelineException.CannotPaginate + updatePaginationStatus(direction) { it.copy(isPaginating = true) } when (direction) { - Timeline.PaginationDirection.BACKWARDS -> inner.paginateBackwards(50u) - Timeline.PaginationDirection.FORWARDS -> inner.paginateForwards(50u) + Timeline.PaginationDirection.BACKWARDS -> inner.paginateBackwards(PAGINATION_SIZE.toUShort()) + Timeline.PaginationDirection.FORWARDS -> inner.paginateForwards(PAGINATION_SIZE.toUShort()) } }.onFailure { error -> + updatePaginationStatus(direction) { it.copy(isPaginating = false) } + if (error is CancellationException) { + throw error + } if (error is TimelineException.CannotPaginate) { Timber.d("Can't paginate $direction on room ${matrixRoom.roomId} with paginationStatus: ${backPaginationStatus.value}") } else { Timber.e(error, "Error paginating $direction on room ${matrixRoom.roomId}") } - }.onSuccess { - Timber.v("Success paginating $direction for room ${matrixRoom.roomId}") + }.onSuccess { hasReachedEnd -> + updatePaginationStatus(direction) { it.copy(isPaginating = false, hasMoreToLoad = !hasReachedEnd) } } } @@ -164,20 +184,6 @@ class RustTimeline( } } - private val backPaginationStatus: StateFlow = inner - .backPaginationStatusFlow() - .map() - .stateIn(roomCoroutineScope, SharingStarted.Eagerly, Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = true)) - - private val forwardPaginationStatus: StateFlow = - when (isLive) { - true -> MutableStateFlow(Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = false)) - false -> inner - .forwardPaginationStatusFlow() - .map() - .stateIn(roomCoroutineScope, SharingStarted.Eagerly, Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = true)) - } - override val timelineItems: Flow> = combine( _timelineItems, backPaginationStatus.map { it.hasMoreToLoad }.distinctUntilChanged(), diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineFlows.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineFlows.kt deleted file mode 100644 index 482489a517..0000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineFlows.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.impl.timeline - -import io.element.android.libraries.matrix.api.timeline.Timeline -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.map -import uniffi.matrix_sdk_ui.PaginationStatus - -fun Flow.map(): Flow = map { paginationStatus -> - when (paginationStatus) { - PaginationStatus.IDLE -> Timeline.PaginationStatus( - isPaginating = false, - hasMoreToLoad = true - ) - PaginationStatus.PAGINATING -> Timeline.PaginationStatus( - isPaginating = true, - hasMoreToLoad = true - ) - PaginationStatus.TIMELINE_END_REACHED -> Timeline.PaginationStatus( - isPaginating = false, - hasMoreToLoad = false - ) - } -} - From fbfcc3638df1151b87a8f9da8374986091a3b4e4 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 23 Apr 2024 15:04:49 +0200 Subject: [PATCH 130/289] Timeline : add box around TimelineItemVirtualRow --- .../components/TimelineItemVirtualRow.kt | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt index 4235c7e065..9dd1210af0 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline.components +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -42,17 +43,19 @@ fun TimelineItemVirtualRow( eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit, modifier: Modifier = Modifier ) { - when (virtual.model) { - is TimelineItemDaySeparatorModel -> TimelineItemDaySeparatorView(virtual.model, modifier) - TimelineItemReadMarkerModel -> TimelineItemReadMarkerView() - is TimelineItemEncryptedHistoryBannerVirtualModel -> TimelineEncryptedHistoryBannerView(modifier) - TimelineItemRoomBeginningModel -> TimelineItemRoomBeginningView(roomName = timelineRoomInfo.name, modifier = modifier) - is TimelineItemLoadingIndicatorModel -> { - TimelineLoadingMoreIndicator(modifier) - LaunchedEffect(key1 = virtual.model.timestamp) { - eventSink(TimelineEvents.LoadMore(virtual.model.direction)) + Box(modifier = modifier) { + when (virtual.model) { + is TimelineItemDaySeparatorModel -> TimelineItemDaySeparatorView(virtual.model) + TimelineItemReadMarkerModel -> TimelineItemReadMarkerView() + is TimelineItemEncryptedHistoryBannerVirtualModel -> TimelineEncryptedHistoryBannerView() + TimelineItemRoomBeginningModel -> TimelineItemRoomBeginningView(roomName = timelineRoomInfo.name) + is TimelineItemLoadingIndicatorModel -> { + TimelineLoadingMoreIndicator() + LaunchedEffect(key1 = virtual.model.timestamp) { + eventSink(TimelineEvents.LoadMore(virtual.model.direction)) + } } + TimelineItemInvisibleIndicatorModel -> Spacer(Modifier) } - TimelineItemInvisibleIndicatorModel -> Spacer(modifier = modifier) } } From 3c961a2693c9b6a4e9ab9e04f681f72753a49b13 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 23 Apr 2024 15:09:01 +0200 Subject: [PATCH 131/289] Timeline : remove highlightedEventId to only use focusedEventId --- .../android/features/messages/impl/MessagesPresenter.kt | 4 ---- .../features/messages/impl/timeline/TimelineEvents.kt | 1 - .../features/messages/impl/timeline/TimelinePresenter.kt | 6 ------ .../features/messages/impl/timeline/TimelineState.kt | 1 - .../messages/impl/timeline/TimelineStateProvider.kt | 1 - .../android/features/messages/impl/timeline/TimelineView.kt | 2 +- 6 files changed, 1 insertion(+), 14 deletions(-) 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 2b74cf1072..6531c0f8d5 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 @@ -185,10 +185,6 @@ class MessagesPresenter @AssistedInject constructor( val snackbarMessage by snackbarDispatcher.collectSnackbarMessageAsState() - LaunchedEffect(composerState.mode.relatedEventId) { - timelineState.eventSink(TimelineEvents.SetHighlightedEvent(composerState.mode.relatedEventId)) - } - val enableTextFormatting by appPreferencesStore.isRichTextEditorEnabledFlow().collectAsState(initial = true) var enableVoiceMessages by remember { mutableStateOf(false) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt index 834b80489b..2edd14b160 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt @@ -20,7 +20,6 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.timeline.Timeline sealed interface TimelineEvents { - data class SetHighlightedEvent(val eventId: EventId?) : TimelineEvents data class OnScrollFinished(val firstIndex: Int) : TimelineEvents data class FocusOnEvent(val eventId: EventId) : TimelineEvents data object ClearFocusRequestState: TimelineEvents diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt index 8b8f73eb1a..570c614603 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt @@ -75,10 +75,6 @@ class TimelinePresenter @AssistedInject constructor( @Composable override fun present(): TimelineState { val localScope = rememberCoroutineScope() - val highlightedEventId: MutableState = rememberSaveable { - mutableStateOf(null) - } - val focusedEventId: MutableState = rememberSaveable { mutableStateOf(null) } @@ -110,7 +106,6 @@ class TimelinePresenter @AssistedInject constructor( timelineController.paginate(direction = event.direction) } } - is TimelineEvents.SetHighlightedEvent -> highlightedEventId.value = event.eventId is TimelineEvents.OnScrollFinished -> { if (isLive) { if (event.firstIndex == 0) { @@ -202,7 +197,6 @@ class TimelinePresenter @AssistedInject constructor( } return TimelineState( timelineRoomInfo = timelineRoomInfo, - highlightedEventId = highlightedEventId.value, timelineItems = timelineItems, renderReadReceipts = renderReadReceipts, newEventState = newEventState.value, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt index c7a077a721..7fb6c1ffdc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt @@ -27,7 +27,6 @@ data class TimelineState( val timelineItems: ImmutableList, val timelineRoomInfo: TimelineRoomInfo, val renderReadReceipts: Boolean, - val highlightedEventId: EventId?, val newEventState: NewEventState, val isLive: Boolean, val focusedEventId : EventId?, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index 201c12837a..2d92027dcd 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -53,7 +53,6 @@ fun aTimelineState( timelineItems = timelineItems, timelineRoomInfo = timelineRoomInfo, renderReadReceipts = renderReadReceipts, - highlightedEventId = null, newEventState = NewEventState.None, isLive = true, focusedEventId = null, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index e3dfa248ad..63a1cb1505 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -146,7 +146,7 @@ fun TimelineView( renderReadReceipts = state.renderReadReceipts, isLastOutgoingMessage = (timelineItem as? TimelineItem.Event)?.isMine == true && state.timelineItems.first().identifier() == timelineItem.identifier(), - highlightedItem = state.highlightedEventId?.value, + highlightedItem = state.focusedEventId?.value, onClick = onMessageClicked, onLongClick = onMessageLongClicked, onUserDataClick = onUserDataClicked, From 20e172c2a6f0b3e0a2ade8f01560d79299453064 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 23 Apr 2024 16:58:23 +0200 Subject: [PATCH 132/289] Timeline permalink : add focused event modifier --- .../messages/impl/timeline/TimelineView.kt | 2 +- .../TimelineItemGroupedEventsRow.kt | 14 +- .../timeline/components/TimelineItemRow.kt | 135 +++++++++++------- .../impl/timeline/model/TimelineItem.kt | 8 ++ .../designsystem/theme/ColorAliases.kt | 5 + 5 files changed, 104 insertions(+), 60 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 63a1cb1505..477314e20e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -146,7 +146,7 @@ fun TimelineView( renderReadReceipts = state.renderReadReceipts, isLastOutgoingMessage = (timelineItem as? TimelineItem.Event)?.isMine == true && state.timelineItems.first().identifier() == timelineItem.identifier(), - highlightedItem = state.focusedEventId?.value, + focusedEventId = state.focusedEventId, onClick = onMessageClicked, onLongClick = onMessageLongClicked, onUserDataClick = onUserDataClicked, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt index a5d42d5dbf..35571278bb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt @@ -43,7 +43,7 @@ fun TimelineItemGroupedEventsRow( timelineRoomInfo: TimelineRoomInfo, renderReadReceipts: Boolean, isLastOutgoingMessage: Boolean, - highlightedItem: String?, + focusedEventId: EventId?, onClick: (TimelineItem.Event) -> Unit, onLongClick: (TimelineItem.Event) -> Unit, inReplyToClick: (EventId) -> Unit, @@ -68,7 +68,7 @@ fun TimelineItemGroupedEventsRow( onExpandGroupClick = ::onExpandGroupClick, timelineItem = timelineItem, timelineRoomInfo = timelineRoomInfo, - highlightedItem = highlightedItem, + focusedEventId = focusedEventId, renderReadReceipts = renderReadReceipts, isLastOutgoingMessage = isLastOutgoingMessage, onClick = onClick, @@ -92,7 +92,7 @@ private fun TimelineItemGroupedEventsRowContent( onExpandGroupClick: () -> Unit, timelineItem: TimelineItem.GroupedEvents, timelineRoomInfo: TimelineRoomInfo, - highlightedItem: String?, + focusedEventId: EventId?, renderReadReceipts: Boolean, isLastOutgoingMessage: Boolean, onClick: (TimelineItem.Event) -> Unit, @@ -116,7 +116,7 @@ private fun TimelineItemGroupedEventsRowContent( timelineItem.events.size ), isExpanded = isExpanded, - isHighlighted = !isExpanded && timelineItem.events.any { it.identifier() == highlightedItem }, + isHighlighted = !isExpanded && timelineItem.events.any { it.isEvent(focusedEventId) }, onClick = onExpandGroupClick, ) if (isExpanded) { @@ -127,7 +127,7 @@ private fun TimelineItemGroupedEventsRowContent( timelineRoomInfo = timelineRoomInfo, renderReadReceipts = renderReadReceipts, isLastOutgoingMessage = isLastOutgoingMessage, - highlightedItem = highlightedItem, + focusedEventId = focusedEventId, onClick = onClick, onLongClick = onLongClick, inReplyToClick = inReplyToClick, @@ -165,7 +165,7 @@ internal fun TimelineItemGroupedEventsRowContentExpandedPreview() = ElementPrevi onExpandGroupClick = {}, timelineItem = aGroupedEvents(withReadReceipts = true), timelineRoomInfo = aTimelineRoomInfo(), - highlightedItem = null, + focusedEventId = null, renderReadReceipts = true, isLastOutgoingMessage = false, onClick = {}, @@ -190,7 +190,7 @@ internal fun TimelineItemGroupedEventsRowContentCollapsePreview() = ElementPrevi onExpandGroupClick = {}, timelineItem = aGroupedEvents(withReadReceipts = true), timelineRoomInfo = aTimelineRoomInfo(), - highlightedItem = null, + focusedEventId = null, renderReadReceipts = true, isLastOutgoingMessage = false, onClick = {}, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index 7c3557b774..4782ff21f1 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -16,13 +16,23 @@ package io.element.android.features.messages.impl.timeline.components +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawWithCache +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.TimelineRoomInfo import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLegacyCallInviteContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStateContent +import io.element.android.libraries.designsystem.text.toPx +import io.element.android.libraries.designsystem.theme.highlightedMessageBackgroundColor import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId @@ -32,7 +42,7 @@ internal fun TimelineItemRow( timelineRoomInfo: TimelineRoomInfo, renderReadReceipts: Boolean, isLastOutgoingMessage: Boolean, - highlightedItem: String?, + focusedEventId: EventId?, onUserDataClick: (UserId) -> Unit, onLinkClicked: (String) -> Unit, onClick: (TimelineItem.Event) -> Unit, @@ -47,71 +57,92 @@ internal fun TimelineItemRow( eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit, modifier: Modifier = Modifier ) { - when (timelineItem) { - is TimelineItem.Virtual -> { - TimelineItemVirtualRow( - virtual = timelineItem, - timelineRoomInfo = timelineRoomInfo, - eventSink = eventSink, - modifier = modifier, - ) - } - is TimelineItem.Event -> { - if (timelineItem.content is TimelineItemStateContent || timelineItem.content is TimelineItemLegacyCallInviteContent) { - TimelineItemStateEventRow( - event = timelineItem, - renderReadReceipts = renderReadReceipts, - isLastOutgoingMessage = isLastOutgoingMessage, - isHighlighted = highlightedItem == timelineItem.identifier(), - onClick = { onClick(timelineItem) }, - onReadReceiptsClick = onReadReceiptClick, - onLongClick = { onLongClick(timelineItem) }, + + val backgroundModifier = if (timelineItem.isEvent(focusedEventId)) { + Modifier.focusedEvent() + } else { + Modifier + } + Box(modifier = modifier.then(backgroundModifier)) { + when (timelineItem) { + is TimelineItem.Virtual -> { + TimelineItemVirtualRow( + virtual = timelineItem, + timelineRoomInfo = timelineRoomInfo, eventSink = eventSink, - modifier = modifier, ) - } else { - TimelineItemEventRow( - event = timelineItem, + } + is TimelineItem.Event -> { + if (timelineItem.content is TimelineItemStateContent || timelineItem.content is TimelineItemLegacyCallInviteContent) { + TimelineItemStateEventRow( + event = timelineItem, + renderReadReceipts = renderReadReceipts, + isLastOutgoingMessage = isLastOutgoingMessage, + isHighlighted = timelineItem.isEvent(focusedEventId), + onClick = { onClick(timelineItem) }, + onReadReceiptsClick = onReadReceiptClick, + onLongClick = { onLongClick(timelineItem) }, + eventSink = eventSink, + ) + } else { + TimelineItemEventRow( + event = timelineItem, + timelineRoomInfo = timelineRoomInfo, + renderReadReceipts = renderReadReceipts, + isLastOutgoingMessage = isLastOutgoingMessage, + isHighlighted = timelineItem.isEvent(focusedEventId), + onClick = { onClick(timelineItem) }, + onLongClick = { onLongClick(timelineItem) }, + onUserDataClick = onUserDataClick, + onLinkClicked = onLinkClicked, + inReplyToClick = inReplyToClick, + onReactionClick = onReactionClick, + onReactionLongClick = onReactionLongClick, + onMoreReactionsClick = onMoreReactionsClick, + onReadReceiptClick = onReadReceiptClick, + onTimestampClicked = onTimestampClicked, + onSwipeToReply = { onSwipeToReply(timelineItem) }, + eventSink = eventSink, + ) + } + } + is TimelineItem.GroupedEvents -> { + TimelineItemGroupedEventsRow( + timelineItem = timelineItem, timelineRoomInfo = timelineRoomInfo, renderReadReceipts = renderReadReceipts, isLastOutgoingMessage = isLastOutgoingMessage, - isHighlighted = highlightedItem == timelineItem.identifier(), - onClick = { onClick(timelineItem) }, - onLongClick = { onLongClick(timelineItem) }, + focusedEventId = focusedEventId, + onClick = onClick, + onLongClick = onLongClick, + inReplyToClick = inReplyToClick, onUserDataClick = onUserDataClick, onLinkClicked = onLinkClicked, - inReplyToClick = inReplyToClick, + onTimestampClicked = onTimestampClicked, onReactionClick = onReactionClick, onReactionLongClick = onReactionLongClick, onMoreReactionsClick = onMoreReactionsClick, onReadReceiptClick = onReadReceiptClick, - onTimestampClicked = onTimestampClicked, - onSwipeToReply = { onSwipeToReply(timelineItem) }, eventSink = eventSink, - modifier = modifier, ) } } - is TimelineItem.GroupedEvents -> { - TimelineItemGroupedEventsRow( - timelineItem = timelineItem, - timelineRoomInfo = timelineRoomInfo, - renderReadReceipts = renderReadReceipts, - isLastOutgoingMessage = isLastOutgoingMessage, - highlightedItem = highlightedItem, - onClick = onClick, - onLongClick = onLongClick, - inReplyToClick = inReplyToClick, - onUserDataClick = onUserDataClick, - onLinkClicked = onLinkClicked, - onTimestampClicked = onTimestampClicked, - onReactionClick = onReactionClick, - onReactionLongClick = onReactionLongClick, - onMoreReactionsClick = onMoreReactionsClick, - onReadReceiptClick = onReadReceiptClick, - eventSink = eventSink, - modifier = modifier, - ) - } } } + +@Composable +private fun Modifier.focusedEvent(): Modifier { + val highlightedLineColor = ElementTheme.colors.textActionAccent + val gradientColors = listOf( + ElementTheme.colors.highlightedMessageBackgroundColor, + ElementTheme.materialColors.background + ) + val verticalOffset = 2.dp.toPx() + return drawWithCache { + val brush = Brush.verticalGradient(gradientColors) + onDrawBehind { + drawRect(brush, topLeft = Offset(0f, verticalOffset), size = Size(size.width, size.height * 0.7f)) + drawLine(highlightedLineColor, start = Offset(0f, verticalOffset), end = Offset(size.width, verticalOffset)) + } + }.padding(top = 4.dp) +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt index fa00c26760..3f46639c6a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt @@ -38,6 +38,14 @@ sealed interface TimelineItem { is GroupedEvents -> id } + fun isEvent(eventId: EventId?): Boolean { + if (eventId == null) return false + return when (this) { + is Event -> this.eventId == eventId + else -> false + } + } + fun contentType(): String = when (this) { is Event -> content.type is Virtual -> model.type diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 5039d10467..1fedcceedd 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -149,6 +149,11 @@ val SemanticColors.bigIconDefaultBackgroundColor val SemanticColors.bigCheckmarkBorderColor get() = if (isLight) LightColorTokens.colorGray400 else DarkColorTokens.colorGray400 +@OptIn(CoreColorToken::class) +val SemanticColors.highlightedMessageBackgroundColor + get() = if (isLight) LightColorTokens.colorGreen300 else DarkColorTokens.colorGreen300 + + @PreviewsDayNight @Composable internal fun ColorAliasesPreview() = ElementPreview { From b764933507a8b2dbe8db05f89a828e1294dd89e3 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 23 Apr 2024 18:02:12 +0200 Subject: [PATCH 133/289] Timeline permalink : branch permalink on event of other room --- .../android/appnav/LoggedInFlowNode.kt | 2 +- .../android/appnav/room/RoomFlowNode.kt | 7 ++++-- .../appnav/room/joined/JoinedRoomFlowNode.kt | 7 ++++-- .../room/joined/JoinedRoomLoadedFlowNode.kt | 2 +- .../impl/DefaultMessagesEntryPoint.kt | 2 +- .../messages/impl/MessagesFlowNode.kt | 14 +++++------ .../features/messages/impl/MessagesNode.kt | 23 +++++++++++++++++-- 7 files changed, 41 insertions(+), 16 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 83cfd5f1f3..ecff658963 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -282,7 +282,7 @@ class LoggedInFlowNode @AssistedInject constructor( is PermalinkData.RoomLink -> { backstack.push( NavTarget.Room( - data.roomIdOrAlias, + roomIdOrAlias = data.roomIdOrAlias, initialElement = RoomNavigationTarget.Messages(data.eventId), // TODO Use the viaParameters ) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index 6d6405c0e8..f397713d08 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -80,7 +80,7 @@ class RoomFlowNode @AssistedInject constructor( data class Inputs( val roomIdOrAlias: RoomIdOrAlias, val roomDescription: Optional, - val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(), + val initialElement: RoomNavigationTarget, ) : NodeInputs private val inputs: Inputs = inputs() @@ -166,7 +166,10 @@ class RoomFlowNode @AssistedInject constructor( } is NavTarget.JoinedRoom -> { val roomFlowNodeCallback = plugins() - val inputs = JoinedRoomFlowNode.Inputs(navTarget.roomId, initialElement = inputs.initialElement) + val inputs = JoinedRoomFlowNode.Inputs( + roomId = navTarget.roomId, + initialElement = inputs.initialElement + ) createNode(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback) } } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt index ae8d03be33..49bcb53048 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt @@ -69,7 +69,7 @@ class JoinedRoomFlowNode @AssistedInject constructor( ) { data class Inputs( val roomId: RoomId, - val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(), + val initialElement: RoomNavigationTarget, ) : NodeInputs private val inputs: Inputs = inputs() @@ -106,7 +106,10 @@ class JoinedRoomFlowNode @AssistedInject constructor( val roomFlowNodeCallback = plugins() val awaitRoomState = loadingRoomStateStateFlow.value if (awaitRoomState is LoadingRoomState.Loaded) { - val inputs = JoinedRoomLoadedFlowNode.Inputs(awaitRoomState.room, initialElement = inputs.initialElement) + val inputs = JoinedRoomLoadedFlowNode.Inputs( + room = awaitRoomState.room, + initialElement = inputs.initialElement + ) createNode(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback) } else { loadingNode(buildContext, this::navigateUp) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt index 5f9a6b6eb3..142b658e5e 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt @@ -84,7 +84,7 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor( data class Inputs( val room: MatrixRoom, - val initialElement: RoomNavigationTarget = RoomNavigationTarget.Messages(), + val initialElement: RoomNavigationTarget, ) : NodeInputs private val inputs: Inputs = inputs() diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt index 73ab29bfeb..0f6a6358d3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt @@ -32,7 +32,7 @@ class DefaultMessagesEntryPoint @Inject constructor() : MessagesEntryPoint { return object : MessagesEntryPoint.NodeBuilder { override fun params(params: MessagesEntryPoint.Params): MessagesEntryPoint.NodeBuilder { - plugins += MessagesNode.Inputs(focusedEventId = params.focusedEventId) + plugins += MessagesFlowNode.Inputs(focusedEventId = params.focusedEventId) return this } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt index f92214b679..c77907a855 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt @@ -54,6 +54,7 @@ import io.element.android.libraries.architecture.BackstackWithOverlayBox import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode +import io.element.android.libraries.architecture.inputs import io.element.android.libraries.architecture.overlay.Overlay import io.element.android.libraries.architecture.overlay.operation.show import io.element.android.libraries.di.ApplicationContext @@ -81,7 +82,7 @@ class MessagesFlowNode @AssistedInject constructor( private val createPollEntryPoint: CreatePollEntryPoint, ) : BaseFlowNode( backstack = BackStack( - initialElement = NavTarget.Messages(plugins.filterIsInstance().firstOrNull()?.focusedEventId), + initialElement = NavTarget.Messages, savedStateMap = buildContext.savedStateMap, ), overlay = Overlay( @@ -91,15 +92,14 @@ class MessagesFlowNode @AssistedInject constructor( plugins = plugins ) { data class Inputs(val focusedEventId: EventId?) : NodeInputs + private val inputs = inputs() sealed interface NavTarget : Parcelable { @Parcelize data object Empty : NavTarget @Parcelize - data class Messages( - val focusedEventId: EventId? = null, - ) : NavTarget + data object Messages: NavTarget @Parcelize data class MediaViewer( @@ -191,10 +191,10 @@ class MessagesFlowNode @AssistedInject constructor( ElementCallActivity.start(context, inputs) } } - val params = MessagesNode.Inputs( - focusedEventId = navTarget.focusedEventId, + val inputs = MessagesNode.Inputs( + focusedEventId = inputs.focusedEventId, ) - createNode(buildContext, listOf(callback, params)) + createNode(buildContext, listOf(callback, inputs)) } is NavTarget.MediaViewer -> { val inputs = MediaViewerNode.Inputs( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 70e077eb04..634aca1733 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -19,6 +19,11 @@ package io.element.android.features.messages.impl import android.content.Context import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.lifecycle.subscribe @@ -37,6 +42,7 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.androidutils.system.openUrlInExternalApp import io.element.android.libraries.androidutils.system.toast import io.element.android.libraries.architecture.NodeInputs +import io.element.android.libraries.architecture.inputs import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.RoomScope @@ -69,9 +75,10 @@ class MessagesNode @AssistedInject constructor( private val presenter = presenterFactory.create(this) private val callback = plugins().firstOrNull() - // TODO Handle navigation to the Event data class Inputs(val focusedEventId: EventId?) : NodeInputs + private val inputs = inputs() + interface Callback : Plugin { fun onRoomDetailsClicked() fun onEventClicked(event: TimelineItem.Event): Boolean @@ -87,7 +94,8 @@ class MessagesNode @AssistedInject constructor( fun onJoinCallClicked(roomId: RoomId) } - init { + override fun onBuilt() { + super.onBuilt() lifecycle.subscribe( onCreate = { analyticsService.capture(room.toAnalyticsViewRoom()) @@ -197,6 +205,17 @@ class MessagesNode @AssistedInject constructor( onJoinCallClicked = this::onJoinCallClicked, modifier = modifier, ) + + var focusedEventId by rememberSaveable { + mutableStateOf(inputs.focusedEventId) + } + LaunchedEffect(Unit) { + focusedEventId?.also { eventId -> + state.timelineState.eventSink(TimelineEvents.FocusOnEvent(eventId)) + } + // Reset the focused event id to null to avoid refocusing when restoring node. + focusedEventId = null + } } } } From a68e290aabf1dba3f869165e93d8e7025a39a149 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Apr 2024 10:22:33 +0200 Subject: [PATCH 134/289] Ensure that Konsist tests are run. --- tools/quality/check.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/quality/check.sh b/tools/quality/check.sh index be323f6884..86eeb84b58 100755 --- a/tools/quality/check.sh +++ b/tools/quality/check.sh @@ -25,8 +25,8 @@ set -e # First run the quickest script ./tools/check/check_code_quality.sh -# Check ktlint first -./gradlew ktlintCheck +# Check ktlint and Konsist first +./gradlew runQualityChecks # Build, test and check the project, with warning as errors # It also check that the minimal app is compiling. From 1ffa6c541ee9106279102a61b5fa90b366d45e57 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Apr 2024 18:36:32 +0200 Subject: [PATCH 135/289] Iterate on `loadingNode` to render the same way JoinedRoomFlowNode / Loading will render. --- .../android/appnav/room/RoomFlowNode.kt | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index 6d6405c0e8..b0c0b5298a 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -17,10 +17,9 @@ package io.element.android.appnav.room import android.os.Parcelable -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.lifecycle.lifecycleScope import com.bumble.appyx.core.modality.BuildContext @@ -36,7 +35,11 @@ import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.room.joined.JoinedRoomFlowNode import io.element.android.appnav.room.joined.JoinedRoomLoadedFlowNode +import io.element.android.appnav.room.joined.LoadingRoomNodeView +import io.element.android.appnav.room.joined.LoadingRoomState import io.element.android.features.joinroom.api.JoinRoomEntryPoint +import io.element.android.features.networkmonitor.api.NetworkMonitor +import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.features.roomaliasesolver.api.RoomAliasResolverEntryPoint import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.BackstackView @@ -44,7 +47,6 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomAlias @@ -69,6 +71,7 @@ class RoomFlowNode @AssistedInject constructor( private val roomMembershipObserver: RoomMembershipObserver, private val joinRoomEntryPoint: JoinRoomEntryPoint, private val roomAliasResolverEntryPoint: RoomAliasResolverEntryPoint, + private val networkMonitor: NetworkMonitor, ) : BaseFlowNode( backstack = BackStack( initialElement = NavTarget.Loading, @@ -172,10 +175,14 @@ class RoomFlowNode @AssistedInject constructor( } } - private fun loadingNode(buildContext: BuildContext) = node(buildContext) { - Box(modifier = it.fillMaxSize(), contentAlignment = Alignment.Center) { - CircularProgressIndicator() - } + private fun loadingNode(buildContext: BuildContext) = node(buildContext) { modifier -> + val networkStatus by networkMonitor.connectivity.collectAsState() + LoadingRoomNodeView( + state = LoadingRoomState.Loading, + hasNetworkConnection = networkStatus == NetworkStatus.Online, + onBackClicked = { navigateUp() }, + modifier = modifier, + ) } @Composable From 7bbcb719d5fa63ee0c7216be1b3431bde611c68e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 11:15:33 +0200 Subject: [PATCH 136/289] Implement a migration mechanism to handle internal stuff which need to occur during application upgrade. Remove VectorFileLogger, it was dead code. --- app/build.gradle.kts | 1 + .../io/element/android/x/MainActivity.kt | 39 ++-- .../io/element/android/x/di/AppBindings.kt | 3 + features/migration/api/build.gradle.kts | 27 +++ .../features/api/MigrationEntryPoint.kt | 31 +++ .../android/features/api/MigrationState.kt | 23 +++ features/migration/impl/build.gradle.kts | 44 +++++ .../impl/DefaultMigrationEntryPoint.kt | 42 +++++ .../migration/impl/DefaultMigrationStore.kt | 52 ++++++ .../migration/impl/MigrationPresenter.kt | 73 ++++++++ .../migration/impl/MigrationStateProvider.kt | 35 ++++ .../features/migration/impl/MigrationStore.kt | 24 +++ .../features/migration/impl/MigrationView.kt | 65 +++++++ .../migration/impl/InMemoryMigrationStore.kt | 34 ++++ .../migration/impl/MigrationPresenterTest.kt | 87 +++++++++ .../rageshake/api/logs/LogFilesRemover.kt | 21 +++ .../impl/bugreport/BugReportPresenter.kt | 5 +- .../impl/logs/DefaultLogFilesRemover.kt | 32 ++++ .../rageshake/impl/logs/VectorFileLogger.kt | 176 ------------------ .../impl/reporter/DefaultBugReporter.kt | 7 +- .../impl/bugreport/BugReportPresenterTest.kt | 16 +- .../impl/logs/VectorFileLoggerTest.kt | 58 ------ features/rageshake/test/build.gradle.kts | 1 + .../test/logs/FakeLogFilesRemover.kt | 28 +++ .../src/main/res/values/localazy.xml | 1 + 25 files changed, 671 insertions(+), 254 deletions(-) create mode 100644 features/migration/api/build.gradle.kts create mode 100644 features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationEntryPoint.kt create mode 100644 features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationState.kt create mode 100644 features/migration/impl/build.gradle.kts create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationStore.kt create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStateProvider.kt create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStore.kt create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationView.kt create mode 100644 features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/InMemoryMigrationStore.kt create mode 100644 features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt create mode 100644 features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/logs/LogFilesRemover.kt create mode 100644 features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt delete mode 100644 features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/VectorFileLogger.kt delete mode 100644 features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/logs/VectorFileLoggerTest.kt create mode 100644 features/rageshake/test/src/main/kotlin/io/element/android/features/rageshake/test/logs/FakeLogFilesRemover.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e3f34f9ea6..6ecfe66fb6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -219,6 +219,7 @@ dependencies { allServicesImpl() allFeaturesImpl(rootDir, logger) implementation(projects.features.call) + implementation(projects.features.migration.api) implementation(projects.anvilannotations) implementation(projects.appnav) implementation(projects.appconfig) diff --git a/app/src/main/kotlin/io/element/android/x/MainActivity.kt b/app/src/main/kotlin/io/element/android/x/MainActivity.kt index ee277a40cf..6dc1e7fc6a 100644 --- a/app/src/main/kotlin/io/element/android/x/MainActivity.kt +++ b/app/src/main/kotlin/io/element/android/x/MainActivity.kt @@ -86,6 +86,7 @@ class MainActivity : NodeActivity() { appBindings.preferencesStore().getThemeFlow().mapToTheme() } .collectAsState(initial = Theme.System) + val migrationState = appBindings.migrationEntryPoint().present() ElementTheme( darkTheme = theme.isDark() ) { @@ -98,19 +99,12 @@ class MainActivity : NodeActivity() { .fillMaxSize() .background(MaterialTheme.colorScheme.background), ) { - NodeHost(integrationPoint = appyxIntegrationPoint) { - MainNode( - it, - plugins = listOf( - object : NodeReadyObserver { - override fun init(node: MainNode) { - Timber.tag(loggerTag.value).w("onMainNodeInit") - mainNode = node - mainNode.handleIntent(intent) - } - } - ), - context = applicationContext + if (migrationState.migrationAction.isSuccess()) { + MainNodeHost() + } else { + appBindings.migrationEntryPoint().Render( + state = migrationState, + modifier = Modifier, ) } } @@ -118,6 +112,25 @@ class MainActivity : NodeActivity() { } } + @Composable + private fun MainNodeHost() { + NodeHost(integrationPoint = appyxIntegrationPoint) { + MainNode( + it, + plugins = listOf( + object : NodeReadyObserver { + override fun init(node: MainNode) { + Timber.tag(loggerTag.value).w("onMainNodeInit") + mainNode = node + mainNode.handleIntent(intent) + } + } + ), + context = applicationContext + ) + } + } + /** * Called when: * - the launcher icon is clicked (if the app is already running); diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt index 0934771501..d8be841b97 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt @@ -17,6 +17,7 @@ package io.element.android.x.di import com.squareup.anvil.annotations.ContributesTo +import io.element.android.features.api.MigrationEntryPoint import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.preferences.api.store.AppPreferencesStore import io.element.android.features.rageshake.api.reporter.BugReporter @@ -35,4 +36,6 @@ interface AppBindings { fun lockScreenService(): LockScreenService fun preferencesStore(): AppPreferencesStore + + fun migrationEntryPoint(): MigrationEntryPoint } diff --git a/features/migration/api/build.gradle.kts b/features/migration/api/build.gradle.kts new file mode 100644 index 0000000000..485635259e --- /dev/null +++ b/features/migration/api/build.gradle.kts @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + id("io.element.android-compose-library") +} + +android { + namespace = "io.element.android.features.migration.api" +} + +dependencies { + implementation(projects.libraries.architecture) +} diff --git a/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationEntryPoint.kt b/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationEntryPoint.kt new file mode 100644 index 0000000000..bd3ad4c466 --- /dev/null +++ b/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationEntryPoint.kt @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.api + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +interface MigrationEntryPoint { + @Composable + fun present(): MigrationState + + @Composable + fun Render( + state: MigrationState, + modifier: Modifier, + ) +} diff --git a/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationState.kt b/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationState.kt new file mode 100644 index 0000000000..d8d4dc1bf9 --- /dev/null +++ b/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationState.kt @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.api + +import io.element.android.libraries.architecture.AsyncData + +data class MigrationState( + val migrationAction: AsyncData = AsyncData.Uninitialized, +) diff --git a/features/migration/impl/build.gradle.kts b/features/migration/impl/build.gradle.kts new file mode 100644 index 0000000000..5ae18e8791 --- /dev/null +++ b/features/migration/impl/build.gradle.kts @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + id("io.element.android-compose-library") + alias(libs.plugins.anvil) + alias(libs.plugins.ksp) +} + +android { + namespace = "io.element.android.features.migration.impl" +} + +dependencies { + implementation(projects.features.migration.api) + implementation(projects.libraries.architecture) + implementation(libs.androidx.datastore.preferences) + implementation(projects.features.rageshake.api) + implementation(projects.libraries.designsystem) + implementation(projects.libraries.uiStrings) + + ksp(libs.showkase.processor) + + testImplementation(libs.test.junit) + testImplementation(libs.coroutines.test) + testImplementation(libs.molecule.runtime) + testImplementation(libs.test.truth) + testImplementation(libs.test.turbine) + testImplementation(projects.tests.testutils) + testImplementation(projects.features.rageshake.test) +} diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt new file mode 100644 index 0000000000..866e3cfd65 --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.features.api.MigrationEntryPoint +import io.element.android.features.api.MigrationState +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +@ContributesBinding(AppScope::class) +class DefaultMigrationEntryPoint @Inject constructor( + private val migrationPresenter: MigrationPresenter, +) : MigrationEntryPoint { + @Composable + override fun present(): MigrationState = migrationPresenter.present() + + @Composable + override fun Render( + state: MigrationState, + modifier: Modifier, + ) = MigrationView( + migrationState = state, + modifier = modifier, + ) +} diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationStore.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationStore.kt new file mode 100644 index 0000000000..a0158061e2 --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationStore.kt @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.intPreferencesKey +import androidx.datastore.preferences.preferencesDataStore +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.libraries.di.AppScope +import io.element.android.libraries.di.ApplicationContext +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import javax.inject.Inject + +private val Context.dataStore: DataStore by preferencesDataStore(name = "elementx_migration") +private val applicationMigrationVersion = intPreferencesKey("applicationMigrationVersion") + +@ContributesBinding(AppScope::class) +class DefaultMigrationStore @Inject constructor( + @ApplicationContext context: Context, +) : MigrationStore { + private val store = context.dataStore + + override suspend fun setApplicationMigrationVersion(version: Int) { + store.edit { prefs -> + prefs[applicationMigrationVersion] = version + } + } + + override fun applicationMigrationVersion(): Flow { + return store.data.map { prefs -> + prefs[applicationMigrationVersion] ?: 0 + } + } +} diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt new file mode 100644 index 0000000000..2f1b04ded5 --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import io.element.android.features.api.MigrationState +import io.element.android.features.rageshake.api.logs.LogFilesRemover +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.architecture.Presenter +import javax.inject.Inject + +class MigrationPresenter @Inject constructor( + private val migrationStore: MigrationStore, + private val logFilesRemover: LogFilesRemover, +) : Presenter { + @Composable + override fun present(): MigrationState { + val migrationStoreVersion = migrationStore.applicationMigrationVersion().collectAsState(initial = null) + var migrationAction: AsyncData by remember { mutableStateOf(AsyncData.Uninitialized) } + + // Uncomment this block to run the migration everytime + /* + LaunchedEffect(Unit) { + migrationStore.setApplicationMigrationVersion(0) + } + */ + + LaunchedEffect(migrationStoreVersion.value) { + val migrationValue = migrationStoreVersion.value ?: return@LaunchedEffect + if (migrationValue == MIGRATION_VERSION) { + migrationAction = AsyncData.Success(Unit) + return@LaunchedEffect + } + migrationAction = AsyncData.Loading(Unit) + if (migrationValue < 1) { + logFilesRemover.perform() + } + // Add new step here + + migrationStore.setApplicationMigrationVersion(MIGRATION_VERSION) + } + + return MigrationState( + migrationAction = migrationAction, + ) + } + + companion object { + // Increment this value when you need to run the migration again, and + // add step in the LaunchedEffect above + const val MIGRATION_VERSION = 1 + } +} diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStateProvider.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStateProvider.kt new file mode 100644 index 0000000000..a2729c93f3 --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStateProvider.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.api.MigrationState +import io.element.android.libraries.architecture.AsyncData + +internal class MigrationStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aMigrationState(), + aMigrationState(migrationAction = AsyncData.Loading(Unit)), + ) +} + +internal fun aMigrationState( + migrationAction: AsyncData = AsyncData.Uninitialized, +) = MigrationState( + migrationAction = migrationAction, +) diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStore.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStore.kt new file mode 100644 index 0000000000..ed4bff745c --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStore.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl + +import kotlinx.coroutines.flow.Flow + +interface MigrationStore { + suspend fun setApplicationMigrationVersion(version: Int) + fun applicationMigrationVersion(): Flow +} diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationView.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationView.kt new file mode 100644 index 0000000000..f912759b23 --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationView.kt @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp +import io.element.android.features.api.MigrationState +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator +import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.ui.strings.CommonStrings + +@Composable +fun MigrationView( + migrationState: MigrationState, + modifier: Modifier = Modifier, +) { + Box( + modifier = modifier.fillMaxSize(), + contentAlignment = Alignment.Center, + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + CircularProgressIndicator() + if (migrationState.migrationAction.isLoading()) { + Text(text = stringResource(id = CommonStrings.common_please_wait)) + } + } + } +} + +@PreviewsDayNight +@Composable +internal fun MigrationViewPreview( + @PreviewParameter(MigrationStateProvider::class) state: MigrationState, +) = ElementPreview { + MigrationView( + migrationState = state, + ) +} diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/InMemoryMigrationStore.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/InMemoryMigrationStore.kt new file mode 100644 index 0000000000..ba5b63f3cc --- /dev/null +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/InMemoryMigrationStore.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow + +class InMemoryMigrationStore( + initialApplicationMigrationVersion: Int = 0 +) : MigrationStore { + private val applicationMigrationVersion = MutableStateFlow(initialApplicationMigrationVersion) + + override suspend fun setApplicationMigrationVersion(version: Int) { + applicationMigrationVersion.value = version + } + + override fun applicationMigrationVersion(): Flow { + return applicationMigrationVersion + } +} diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt new file mode 100644 index 0000000000..a651362702 --- /dev/null +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl + +import app.cash.molecule.RecompositionMode +import app.cash.molecule.moleculeFlow +import app.cash.turbine.test +import com.google.common.truth.Truth.assertThat +import io.element.android.features.rageshake.api.logs.LogFilesRemover +import io.element.android.features.rageshake.test.logs.FakeLogFilesRemover +import io.element.android.libraries.architecture.AsyncData +import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.lambda.lambdaRecorder +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.runTest +import org.junit.Rule +import org.junit.Test + +class MigrationPresenterTest { + @get:Rule + val warmUpRule = WarmUpRule() + + @Test + fun `present - no migration should occurs if ApplicationMigrationVersion is the last one`() = runTest { + val store = InMemoryMigrationStore(MigrationPresenter.MIGRATION_VERSION) + val presenter = createPresenter( + migrationStore = store, + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + assertThat(initialState.migrationAction).isEqualTo(AsyncData.Uninitialized) + awaitItem().also { state -> + assertThat(state.migrationAction).isEqualTo(AsyncData.Success(Unit)) + } + } + } + + @Test + fun `present - testing all migrations`() = runTest { + val store = InMemoryMigrationStore(0) + val logFilesRemoverLambda = lambdaRecorder { -> } + val presenter = createPresenter( + migrationStore = store, + logFilesRemover = FakeLogFilesRemover(logFilesRemoverLambda), + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + assertThat(initialState.migrationAction).isEqualTo(AsyncData.Uninitialized) + awaitItem().also { state -> + assertThat(state.migrationAction).isEqualTo(AsyncData.Loading(Unit)) + } + awaitItem().also { state -> + assertThat(state.migrationAction).isEqualTo(AsyncData.Success(Unit)) + } + logFilesRemoverLambda.assertions().isCalledExactly(1) + assertThat(store.applicationMigrationVersion().first()).isEqualTo(MigrationPresenter.MIGRATION_VERSION) + } + } + + private fun createPresenter( + migrationStore: MigrationStore = InMemoryMigrationStore(0), + logFilesRemover: LogFilesRemover = FakeLogFilesRemover(lambdaRecorder(ensureNeverCalled = true) { -> }), + ): MigrationPresenter { + return MigrationPresenter( + migrationStore = migrationStore, + logFilesRemover = logFilesRemover, + ) + } +} diff --git a/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/logs/LogFilesRemover.kt b/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/logs/LogFilesRemover.kt new file mode 100644 index 0000000000..dd73133060 --- /dev/null +++ b/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/logs/LogFilesRemover.kt @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.rageshake.api.logs + +interface LogFilesRemover { + suspend fun perform() +} diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt index 5e3b3cfeb1..1fd8526458 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt @@ -26,10 +26,10 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import io.element.android.features.rageshake.api.crash.CrashDataStore +import io.element.android.features.rageshake.api.logs.LogFilesRemover import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.features.rageshake.api.reporter.BugReporterListener import io.element.android.features.rageshake.api.screenshot.ScreenshotHolder -import io.element.android.features.rageshake.impl.logs.VectorFileLogger import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import kotlinx.coroutines.CoroutineScope @@ -40,6 +40,7 @@ class BugReportPresenter @Inject constructor( private val bugReporter: BugReporter, private val crashDataStore: CrashDataStore, private val screenshotHolder: ScreenshotHolder, + private val logFilesRemover: LogFilesRemover, private val appCoroutineScope: CoroutineScope, ) : Presenter { private class BugReporterUploadListener( @@ -150,6 +151,6 @@ class BugReportPresenter @Inject constructor( private fun CoroutineScope.resetAll() = launch { screenshotHolder.reset() crashDataStore.reset() - VectorFileLogger.getFromTimber()?.reset() + logFilesRemover.perform() } } diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt new file mode 100644 index 0000000000..c0c7c8c346 --- /dev/null +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.rageshake.impl.logs + +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.features.rageshake.api.logs.LogFilesRemover +import io.element.android.features.rageshake.impl.reporter.DefaultBugReporter +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +@ContributesBinding(AppScope::class) +class DefaultLogFilesRemover @Inject constructor( + private val bugReporter: DefaultBugReporter, +) : LogFilesRemover { + override suspend fun perform() { + bugReporter.deleteAllFiles() + } +} diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/VectorFileLogger.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/VectorFileLogger.kt deleted file mode 100644 index 859f1c961a..0000000000 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/VectorFileLogger.kt +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2022 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.rageshake.impl.logs - -import android.content.Context -import android.util.Log -import io.element.android.libraries.androidutils.file.safeDelete -import io.element.android.libraries.core.data.tryOrNull -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch -import timber.log.Timber -import java.io.File -import java.io.PrintWriter -import java.io.StringWriter -import java.util.logging.FileHandler -import java.util.logging.Level -import java.util.logging.Logger - -/** - * Will be planted in Timber. - */ -class VectorFileLogger( - private val context: Context, - // private val vectorPreferences: VectorPreferences - private val dispatcher: CoroutineDispatcher = Dispatchers.IO, -) : Timber.Tree() { - companion object { - fun getFromTimber(): VectorFileLogger? { - return Timber.forest().filterIsInstance().firstOrNull() - } - - private const val SIZE_20MB = 20 * 1024 * 1024 - // private const val SIZE_50MB = 50 * 1024 * 1024 - } - - /* - private val maxLogSizeByte = if (vectorPreferences.labAllowedExtendedLogging()) SIZE_50MB else SIZE_20MB - private val logRotationCount = if (vectorPreferences.labAllowedExtendedLogging()) 15 else 7 - */ - private val maxLogSizeByte = SIZE_20MB - private val logRotationCount = 7 - - private val logger = Logger.getLogger(context.packageName).apply { - tryOrNull { - useParentHandlers = false - level = Level.ALL - } - } - - private val fileHandler: FileHandler? - private val cacheDirectory get() = File(context.cacheDir, "logs").apply { - if (!exists()) mkdirs() - } - private var fileNamePrefix = "logs" - - private val prioPrefixes = mapOf( - Log.VERBOSE to "V/ ", - Log.DEBUG to "D/ ", - Log.INFO to "I/ ", - Log.WARN to "W/ ", - Log.ERROR to "E/ ", - Log.ASSERT to "WTF/ " - ) - - init { - for (i in 0..15) { - val file = File(cacheDirectory, "elementLogs.$i.txt") - file.safeDelete() - } - - fileHandler = tryOrNull( - onError = { Timber.e(it, "Failed to initialize FileLogger") } - ) { - FileHandler( - cacheDirectory.absolutePath + "/" + fileNamePrefix + ".%g.txt", - maxLogSizeByte, - logRotationCount - ) - .also { it.formatter = LogFormatter() } - .also { logger.addHandler(it) } - } - } - - fun reset() { - // Delete all files - getLogFiles().map { - it.safeDelete() - } - } - - @OptIn(DelicateCoroutinesApi::class) - override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { - fileHandler ?: return - GlobalScope.launch(dispatcher) { - if (skipLog(priority)) return@launch - if (t != null) { - logToFile(t) - } - logToFile(prioPrefixes[priority] ?: "$priority ", tag ?: "Tag", message) - } - } - - private fun skipLog(priority: Int): Boolean { - // return if (vectorPreferences.labAllowedExtendedLogging()) { - // false - // } else { - // // Exclude verbose logs - // priority < Log.DEBUG - // } - // Exclude verbose logs - return priority < Log.DEBUG - } - - /** - * Adds our own log files to the provided list of files. - * - * @return The list of files with logs. - */ - private fun getLogFiles(): List { - return tryOrNull( - onError = { Timber.e(it, "## getLogFiles() failed") } - ) { - fileHandler - ?.flush() - ?.let { 0 until logRotationCount } - ?.mapNotNull { index -> - File(cacheDirectory, "$fileNamePrefix.$index.txt") - .takeIf { it.exists() } - } - } - .orEmpty() - } - - /** - * Log an Throwable. - * - * @param throwable the throwable to log - */ - private fun logToFile(throwable: Throwable?) { - throwable ?: return - - val errors = StringWriter() - throwable.printStackTrace(PrintWriter(errors)) - - logger.info(errors.toString()) - } - - private fun logToFile(level: String, tag: String, content: String) { - val b = StringBuilder() - b.append(Thread.currentThread().id) - b.append(" ") - b.append(level) - b.append("/") - b.append(tag) - b.append(": ") - b.append(content) - logger.info(b.toString()) - } -} diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt index aa0633c273..15a0adcf17 100755 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt @@ -346,6 +346,12 @@ class DefaultBugReporter @Inject constructor( } } + suspend fun deleteAllFiles() { + withContext(coroutineDispatchers.io) { + getLogFiles().forEach { it.safeDelete() } + } + } + override fun setCurrentTracingFilter(tracingFilter: String) { currentTracingFilter = tracingFilter } @@ -374,7 +380,6 @@ class DefaultBugReporter @Inject constructor( /** * Delete all the log files except the most recent one. - * */ private fun List.deleteAllExceptMostRecent() { if (size > 1) { diff --git a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenterTest.kt b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenterTest.kt index 7d6f16d412..e0c033afc7 100644 --- a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenterTest.kt +++ b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenterTest.kt @@ -21,15 +21,18 @@ import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.rageshake.api.crash.CrashDataStore +import io.element.android.features.rageshake.api.logs.LogFilesRemover import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.features.rageshake.api.screenshot.ScreenshotHolder import io.element.android.features.rageshake.test.crash.A_CRASH_DATA import io.element.android.features.rageshake.test.crash.FakeCrashDataStore +import io.element.android.features.rageshake.test.logs.FakeLogFilesRemover import io.element.android.features.rageshake.test.screenshot.A_SCREENSHOT_URI import io.element.android.features.rageshake.test.screenshot.FakeScreenshotHolder import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.test.A_FAILURE_REASON import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.lambda.lambdaRecorder import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest import org.junit.Rule @@ -117,9 +120,11 @@ class BugReportPresenterTest { @Test fun `present - reset all`() = runTest { + val logFilesRemoverLambda = lambdaRecorder { -> } val presenter = createPresenter( crashDataStore = FakeCrashDataStore(crashData = A_CRASH_DATA, appHasCrashed = true), screenshotHolder = FakeScreenshotHolder(screenshotUri = A_SCREENSHOT_URI), + logFilesRemover = FakeLogFilesRemover(logFilesRemoverLambda), ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -131,6 +136,7 @@ class BugReportPresenterTest { initialState.eventSink.invoke(BugReportEvents.ResetAll) val resetState = awaitItem() assertThat(resetState.hasCrashLogs).isFalse() + logFilesRemoverLambda.assertions().isCalledExactly(1) // TODO Make it live assertThat(resetState.screenshotUri).isNull() } } @@ -239,10 +245,12 @@ class BugReportPresenterTest { bugReporter: BugReporter = FakeBugReporter(), crashDataStore: CrashDataStore = FakeCrashDataStore(), screenshotHolder: ScreenshotHolder = FakeScreenshotHolder(), + logFilesRemover: LogFilesRemover = FakeLogFilesRemover(lambdaRecorder(ensureNeverCalled = true) { -> }), ) = BugReportPresenter( - bugReporter, - crashDataStore, - screenshotHolder, - this, + bugReporter = bugReporter, + crashDataStore = crashDataStore, + screenshotHolder = screenshotHolder, + logFilesRemover = logFilesRemover, + appCoroutineScope = this, ) } diff --git a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/logs/VectorFileLoggerTest.kt b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/logs/VectorFileLoggerTest.kt deleted file mode 100644 index 26e29e1786..0000000000 --- a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/logs/VectorFileLoggerTest.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.rageshake.impl.logs - -import com.google.common.truth.Truth.assertThat -import io.element.android.libraries.matrix.test.A_THROWABLE -import io.element.android.tests.testutils.testCoroutineDispatchers -import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.runTest -import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment - -@RunWith(RobolectricTestRunner::class) -class VectorFileLoggerTest { - @Test - fun `init VectorFileLogger log debug`() = runTest { - val sut = createVectorFileLogger() - sut.d("A debug log") - } - - @Test - fun `init VectorFileLogger log error`() = runTest { - val sut = createVectorFileLogger() - sut.e(A_THROWABLE, "A debug log") - } - - @Test - fun `reset VectorFileLogger`() = runTest { - val sut = createVectorFileLogger() - sut.reset() - } - - @Test - fun `check getFromTimber`() { - assertThat(VectorFileLogger.getFromTimber()).isNull() - } - - private fun TestScope.createVectorFileLogger() = VectorFileLogger( - context = RuntimeEnvironment.getApplication(), - dispatcher = testCoroutineDispatchers().io, - ) -} diff --git a/features/rageshake/test/build.gradle.kts b/features/rageshake/test/build.gradle.kts index 31d0377f35..c22d2bd205 100644 --- a/features/rageshake/test/build.gradle.kts +++ b/features/rageshake/test/build.gradle.kts @@ -24,4 +24,5 @@ android { dependencies { implementation(projects.features.rageshake.api) implementation(libs.coroutines.core) + implementation(projects.tests.testutils) } diff --git a/features/rageshake/test/src/main/kotlin/io/element/android/features/rageshake/test/logs/FakeLogFilesRemover.kt b/features/rageshake/test/src/main/kotlin/io/element/android/features/rageshake/test/logs/FakeLogFilesRemover.kt new file mode 100644 index 0000000000..a3c927fe41 --- /dev/null +++ b/features/rageshake/test/src/main/kotlin/io/element/android/features/rageshake/test/logs/FakeLogFilesRemover.kt @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.rageshake.test.logs + +import io.element.android.features.rageshake.api.logs.LogFilesRemover +import io.element.android.tests.testutils.lambda.LambdaNoParamRecorder + +class FakeLogFilesRemover( + private val performLambda: LambdaNoParamRecorder, +) : LogFilesRemover { + override suspend fun perform() { + performLambda() + } +} diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 05d6aa1b24..8366daf9c4 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -164,6 +164,7 @@ "People" "Permalink" "Permission" + "Please wait…" "Are you sure you want to end this poll?" "Poll: %1$s" "Total votes: %1$s" From ab2c82498d4b1d890e39ba9bcc855b757cde0112 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Wed, 24 Apr 2024 08:27:09 +0000 Subject: [PATCH 137/289] Update screenshots --- ...nView_null_MigrationView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 3 +++ ...nView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_MigrationView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_MigrationView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 3 +++ 4 files changed, 12 insertions(+) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..a97ecf3e6e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:059ce2660851e0a6abec4ee03e3354ea198f53c870494a0f35ae79c8649375de +size 6247 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4f12656894 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4beca80d1322179abef79eee5511060c3e658a390a7810e09b170d057d422764 +size 9260 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..cfd571078e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75ecf865e748810fe6ac4a1a8cdc54db92259fb3be1fbe32156aec7f3e825104 +size 6199 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..2f51e130ad --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f74c95cc56e33f56649db1dc652bdfd323f6fd5bf09bb76920a8a04d35096752 +size 8845 From 768d7c88bbe7a8b8b6cd0ef7435694c18b6863ac Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 11:38:19 +0200 Subject: [PATCH 138/289] Changelog --- changelog.d/2749.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2749.misc diff --git a/changelog.d/2749.misc b/changelog.d/2749.misc new file mode 100644 index 0000000000..95f60d7085 --- /dev/null +++ b/changelog.d/2749.misc @@ -0,0 +1 @@ +Migrate application data. From cbbda81419520eed66b2af4915ba4c07fd08ec02 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 11:40:09 +0200 Subject: [PATCH 139/289] Code quality. --- .../android/features/api/MigrationState.kt | 2 +- .../migration/impl/MigrationPresenterTest.kt | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationState.kt b/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationState.kt index d8d4dc1bf9..b51dd82bc5 100644 --- a/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationState.kt +++ b/features/migration/api/src/main/kotlin/io/element/android/features/api/MigrationState.kt @@ -19,5 +19,5 @@ package io.element.android.features.api import io.element.android.libraries.architecture.AsyncData data class MigrationState( - val migrationAction: AsyncData = AsyncData.Uninitialized, + val migrationAction: AsyncData, ) diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt index a651362702..01b2d847a7 100644 --- a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt @@ -74,14 +74,12 @@ class MigrationPresenterTest { assertThat(store.applicationMigrationVersion().first()).isEqualTo(MigrationPresenter.MIGRATION_VERSION) } } - - private fun createPresenter( - migrationStore: MigrationStore = InMemoryMigrationStore(0), - logFilesRemover: LogFilesRemover = FakeLogFilesRemover(lambdaRecorder(ensureNeverCalled = true) { -> }), - ): MigrationPresenter { - return MigrationPresenter( - migrationStore = migrationStore, - logFilesRemover = logFilesRemover, - ) - } } + +private fun createPresenter( + migrationStore: MigrationStore = InMemoryMigrationStore(0), + logFilesRemover: LogFilesRemover = FakeLogFilesRemover(lambdaRecorder(ensureNeverCalled = true) { -> }), +) = MigrationPresenter( + migrationStore = migrationStore, + logFilesRemover = logFilesRemover, +) From 7094955bc9320863db4ce0b904cf60cd8b014f78 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 24 Apr 2024 12:34:52 +0200 Subject: [PATCH 140/289] Timeline : use latest api --- .../android/libraries/matrix/impl/room/RustMatrixRoom.kt | 8 ++++++-- .../matrix/impl/roomlist/RoomListItemExtensions.kt | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 147ca3f2da..a6e51fefbc 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -184,8 +184,12 @@ class RustMatrixRoom( override suspend fun unsubscribeFromSync() = roomSyncSubscriber.unsubscribe(roomId) override suspend fun timelineFocusedOnEvent(eventId: EventId): Timeline { - return innerRoom.timelineFocusedOnEvent(eventId.value, numContextEvents = 50u).let {inner -> - createTimeline(inner, isLive = false){} + return innerRoom.timelineFocusedOnEvent( + eventId = eventId.value, + numContextEvents = 50u, + internalIdPrefix = "focus_$eventId", + ).let {inner -> + createTimeline(inner, isLive = false) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListItemExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListItemExtensions.kt index 24f292b456..1ab7d9f7d7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListItemExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListItemExtensions.kt @@ -23,7 +23,7 @@ import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter /** Returns a `Room` with an initialized timeline using the given [filter]. */ suspend fun RoomListItem.fullRoomWithTimeline(filter: TimelineEventTypeFilter? = null): Room { if (!isTimelineInitialized()) { - initTimeline(filter) + initTimeline(filter, "live") } return fullRoom() } From 124638c7a73a1ca3f17308e07ace0fd0493acc97 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 13:26:27 +0200 Subject: [PATCH 141/289] Add KDoc. --- .../features/migration/impl/MigrationStore.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStore.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStore.kt index ed4bff745c..266b288fab 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStore.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationStore.kt @@ -19,6 +19,16 @@ package io.element.android.features.migration.impl import kotlinx.coroutines.flow.Flow interface MigrationStore { - suspend fun setApplicationMigrationVersion(version: Int) + /** + * Return of flow of the current value for application migration version. + * If the value is not set, it will emit 0. + * If the emitted value is lower than the current application migration version, it means + * that a migration should occur, and at the end [setApplicationMigrationVersion] should be called. + */ fun applicationMigrationVersion(): Flow + + /** + * Set the application migration version, typically after a migration has been done. + */ + suspend fun setApplicationMigrationVersion(version: Int) } From 7785e45c1614d6fc2b0154fb3c51318b4b64bf40 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 13:28:11 +0200 Subject: [PATCH 142/289] Remove dead code. --- .../rageshake/impl/logs/LogFormatter.kt | 63 ------------------- 1 file changed, 63 deletions(-) delete mode 100644 features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/LogFormatter.kt diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/LogFormatter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/LogFormatter.kt deleted file mode 100644 index e7381c1c58..0000000000 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/LogFormatter.kt +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2022 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.features.rageshake.impl.logs - -import java.io.PrintWriter -import java.io.StringWriter -import java.text.SimpleDateFormat -import java.util.Date -import java.util.Locale -import java.util.TimeZone -import java.util.logging.Formatter -import java.util.logging.LogRecord - -internal class LogFormatter : Formatter() { - override fun format(r: LogRecord): String { - if (!isTimeZoneSet) { - DATE_FORMAT.timeZone = TimeZone.getTimeZone("UTC") - isTimeZoneSet = true - } - - val thrown = r.thrown - if (thrown != null) { - val sw = StringWriter() - val pw = PrintWriter(sw) - sw.write(r.message) - sw.write(LINE_SEPARATOR) - thrown.printStackTrace(pw) - pw.flush() - return sw.toString() - } else { - val b = StringBuilder() - val date = DATE_FORMAT.format(Date(r.millis)) - b.append(date) - b.append("Z ") - b.append(r.message) - b.append(LINE_SEPARATOR) - return b.toString() - } - } - - companion object { - private val LINE_SEPARATOR = System.getProperty("line.separator") ?: "\n" - - // private val DATE_FORMAT = SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.US) - private val DATE_FORMAT = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss*SSSZZZZ", Locale.US) - - private var isTimeZoneSet = false - } -} From 11aa5bbfd58e1f5aefa894ee949e4b8adb666da1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 13:28:52 +0200 Subject: [PATCH 143/289] Please KtLint --- .../android/features/migration/impl/MigrationPresenter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt index 2f1b04ded5..48f904ea67 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt @@ -38,8 +38,8 @@ class MigrationPresenter @Inject constructor( val migrationStoreVersion = migrationStore.applicationMigrationVersion().collectAsState(initial = null) var migrationAction: AsyncData by remember { mutableStateOf(AsyncData.Uninitialized) } - // Uncomment this block to run the migration everytime /* + // Uncomment this block to run the migration everytime LaunchedEffect(Unit) { migrationStore.setApplicationMigrationVersion(0) } From a6d8209407157d66071dd28c02d1fea123effd76 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 24 Apr 2024 13:37:14 +0200 Subject: [PATCH 144/289] Timeline : exposes same methods as the rust type and use them by default on liveTimeline --- .../libraries/matrix/api/timeline/Timeline.kt | 127 ++++++++ .../matrix/impl/room/RustMatrixRoom.kt | 221 +++---------- .../matrix/impl/timeline/RustTimeline.kt | 297 +++++++++++++++++- 3 files changed, 457 insertions(+), 188 deletions(-) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt index 05b1549ae1..c15c4b323f 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt @@ -17,8 +17,20 @@ package io.element.android.libraries.matrix.api.timeline import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.ProgressCallback +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.TransactionId +import io.element.android.libraries.matrix.api.media.AudioInfo +import io.element.android.libraries.matrix.api.media.FileInfo +import io.element.android.libraries.matrix.api.media.ImageInfo +import io.element.android.libraries.matrix.api.media.MediaUploadHandler +import io.element.android.libraries.matrix.api.media.VideoInfo +import io.element.android.libraries.matrix.api.poll.PollKind +import io.element.android.libraries.matrix.api.room.Mention +import io.element.android.libraries.matrix.api.room.location.AssetType import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow +import java.io.File interface Timeline : AutoCloseable { @@ -39,4 +51,119 @@ interface Timeline : AutoCloseable { suspend fun paginate(direction: PaginationDirection): Result fun paginationStatus(direction: PaginationDirection): StateFlow val timelineItems: Flow> + + + suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result + + suspend fun editMessage(originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List): Result + + suspend fun enterSpecialMode(eventId: EventId?): Result + + suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result + + suspend fun sendImage( + file: File, + thumbnailFile: File?, + imageInfo: ImageInfo, + body: String?, + formattedBody: String?, + progressCallback: ProgressCallback? + ): Result + + suspend fun sendVideo( + file: File, + thumbnailFile: File?, + videoInfo: VideoInfo, + body: String?, + formattedBody: String?, + progressCallback: ProgressCallback? + ): Result + + suspend fun sendAudio(file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?): Result + + suspend fun sendFile(file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?): Result + + suspend fun toggleReaction(emoji: String, eventId: EventId): Result + + suspend fun forwardEvent(eventId: EventId, roomIds: List): Result + + suspend fun retrySendMessage(transactionId: TransactionId): Result + + suspend fun cancelSend(transactionId: TransactionId): Result + + /** + * Share a location message in the room. + * + * @param body A human readable textual representation of the location. + * @param geoUri A geo URI (RFC 5870) representing the location e.g. `geo:51.5008,0.1247;u=35`. + * Respectively: latitude, longitude, and (optional) uncertainty. + * @param description Optional description of the location to display to the user. + * @param zoomLevel Optional zoom level to display the map at. + * @param assetType Optional type of the location asset. + * Set to SENDER if sharing own location. Set to PIN if sharing any location. + */ + suspend fun sendLocation( + body: String, + geoUri: String, + description: String? = null, + zoomLevel: Int? = null, + assetType: AssetType? = null, + ): Result + + /** + * Create a poll in the room. + * + * @param question The question to ask. + * @param answers The list of answers. + * @param maxSelections The maximum number of answers that can be selected. + * @param pollKind The kind of poll to create. + */ + suspend fun createPoll( + question: String, + answers: List, + maxSelections: Int, + pollKind: PollKind, + ): Result + + /** + * Edit a poll in the room. + * + * @param pollStartId The event ID of the poll start event. + * @param question The question to ask. + * @param answers The list of answers. + * @param maxSelections The maximum number of answers that can be selected. + * @param pollKind The kind of poll to create. + */ + suspend fun editPoll( + pollStartId: EventId, + question: String, + answers: List, + maxSelections: Int, + pollKind: PollKind, + ): Result + + /** + * Send a response to a poll. + * + * @param pollStartId The event ID of the poll start event. + * @param answers The list of answer ids to send. + */ + suspend fun sendPollResponse(pollStartId: EventId, answers: List): Result + + /** + * Ends a poll in the room. + * + * @param pollStartId The event ID of the poll start event. + * @param text Fallback text of the poll end event. + */ + suspend fun endPoll(pollStartId: EventId, text: String): Result + + suspend fun sendVoiceMessage( + file: File, + audioInfo: AudioInfo, + waveform: List, + progressCallback: ProgressCallback? + ): Result + + } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index a6e51fefbc..c99c9a8c21 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -43,17 +43,12 @@ import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange import io.element.android.libraries.matrix.api.room.roomNotificationSettings -import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.ReceiptType +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings -import io.element.android.libraries.matrix.impl.core.toProgressWatcher import io.element.android.libraries.matrix.impl.media.MediaUploadHandlerImpl -import io.element.android.libraries.matrix.impl.media.map -import io.element.android.libraries.matrix.impl.media.toMSC3246range import io.element.android.libraries.matrix.impl.notificationsettings.RustNotificationSettingsService -import io.element.android.libraries.matrix.impl.poll.toInner -import io.element.android.libraries.matrix.impl.room.location.toInner import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper import io.element.android.libraries.matrix.impl.room.powerlevels.RoomPowerLevelsMapper @@ -80,8 +75,6 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import org.matrix.rustcomponents.sdk.EventTimelineItem -import org.matrix.rustcomponents.sdk.MessageFormat import org.matrix.rustcomponents.sdk.RoomInfo import org.matrix.rustcomponents.sdk.RoomInfoListener import org.matrix.rustcomponents.sdk.RoomListItem @@ -94,10 +87,8 @@ import org.matrix.rustcomponents.sdk.WidgetCapabilitiesProvider import org.matrix.rustcomponents.sdk.messageEventContentFromHtml import org.matrix.rustcomponents.sdk.messageEventContentFromMarkdown import org.matrix.rustcomponents.sdk.use -import timber.log.Timber import uniffi.matrix_sdk.RoomPowerLevelChanges import java.io.File -import org.matrix.rustcomponents.sdk.FormattedBody as RustFormattedBody import org.matrix.rustcomponents.sdk.Room as InnerRoom import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline @@ -198,7 +189,6 @@ class RustMatrixRoom( liveTimeline.close() innerRoom.destroy() roomListItem.destroy() - specialModeEventTimelineItem?.destroy() } override val name: String? @@ -332,12 +322,8 @@ class RustMatrixRoom( } } - override suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result = withContext(roomDispatcher) { - messageEventContentFromParts(body, htmlBody).withMentions(mentions.map()).use { content -> - runCatching { - innerTimeline.send(content) - } - } + override suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result { + return liveTimeline.sendMessage(body, htmlBody, mentions) } override suspend fun editMessage( @@ -346,45 +332,16 @@ class RustMatrixRoom( body: String, htmlBody: String?, mentions: List, - ): Result = - withContext(roomDispatcher) { - if (originalEventId != null) { - runCatching { - val editedEvent = specialModeEventTimelineItem ?: innerTimeline.getEventTimelineItemByEventId(originalEventId.value) - editedEvent.use { - innerTimeline.edit( - newContent = messageEventContentFromParts(body, htmlBody).withMentions(mentions.map()), - editItem = it, - ) - } - specialModeEventTimelineItem = null - } - } else { - runCatching { - transactionId?.let { cancelSend(it) } - innerTimeline.send(messageEventContentFromParts(body, htmlBody)) - } - } - } - - private var specialModeEventTimelineItem: EventTimelineItem? = null - - override suspend fun enterSpecialMode(eventId: EventId?): Result = withContext(roomDispatcher) { - runCatching { - specialModeEventTimelineItem?.destroy() - specialModeEventTimelineItem = null - specialModeEventTimelineItem = eventId?.let { innerTimeline.getEventTimelineItemByEventId(it.value) } - } + ): Result { + return liveTimeline.editMessage(originalEventId, transactionId, body, htmlBody, mentions) } - override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result = withContext(roomDispatcher) { - runCatching { - val inReplyTo = specialModeEventTimelineItem ?: innerTimeline.getEventTimelineItemByEventId(eventId.value) - inReplyTo.use { eventTimelineItem -> - innerTimeline.sendReply(messageEventContentFromParts(body, htmlBody).withMentions(mentions.map()), eventTimelineItem) - } - specialModeEventTimelineItem = null - } + override suspend fun enterSpecialMode(eventId: EventId?): Result { + return liveTimeline.enterSpecialMode(eventId) + } + + override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result{ + return liveTimeline.replyMessage(eventId, body, htmlBody, mentions) } override suspend fun redactEvent(eventId: EventId, reason: String?) = withContext(roomDispatcher) { @@ -467,18 +424,7 @@ class RustMatrixRoom( formattedBody: String?, progressCallback: ProgressCallback?, ): Result { - return sendAttachment(listOfNotNull(file, thumbnailFile)) { - innerTimeline.sendImage( - url = file.path, - thumbnailUrl = thumbnailFile?.path, - imageInfo = imageInfo.map(), - caption = body, - formattedCaption = formattedBody?.let { - RustFormattedBody(body = it, format = MessageFormat.Html) - }, - progressWatcher = progressCallback?.toProgressWatcher() - ) - } + return liveTimeline.sendImage(file, thumbnailFile, imageInfo, body, formattedBody, progressCallback) } override suspend fun sendVideo( @@ -489,63 +435,31 @@ class RustMatrixRoom( formattedBody: String?, progressCallback: ProgressCallback?, ): Result { - return sendAttachment(listOfNotNull(file, thumbnailFile)) { - innerTimeline.sendVideo( - url = file.path, - thumbnailUrl = thumbnailFile?.path, - videoInfo = videoInfo.map(), - caption = body, - formattedCaption = formattedBody?.let { - RustFormattedBody(body = it, format = MessageFormat.Html) - }, - progressWatcher = progressCallback?.toProgressWatcher() - ) - } + return liveTimeline.sendVideo(file, thumbnailFile, videoInfo, body, formattedBody, progressCallback) } override suspend fun sendAudio(file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?): Result { - return sendAttachment(listOf(file)) { - innerTimeline.sendAudio( - url = file.path, - audioInfo = audioInfo.map(), - // Maybe allow a caption in the future? - caption = null, - formattedCaption = null, - progressWatcher = progressCallback?.toProgressWatcher() - ) - } + return liveTimeline.sendAudio(file, audioInfo, progressCallback) } override suspend fun sendFile(file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?): Result { - return sendAttachment(listOf(file)) { - innerTimeline.sendFile(file.path, fileInfo.map(), progressCallback?.toProgressWatcher()) - } + return liveTimeline.sendFile(file, fileInfo, progressCallback) } - override suspend fun toggleReaction(emoji: String, eventId: EventId): Result = withContext(roomDispatcher) { - runCatching { - innerTimeline.toggleReaction(key = emoji, eventId = eventId.value) - } + override suspend fun toggleReaction(emoji: String, eventId: EventId): Result{ + return liveTimeline.toggleReaction(emoji, eventId) } - override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result = withContext(roomDispatcher) { - runCatching { - roomContentForwarder.forward(fromTimeline = innerTimeline, eventId = eventId, toRoomIds = roomIds) - }.onFailure { - Timber.e(it) - } + override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result{ + return liveTimeline.forwardEvent(eventId, roomIds) } - override suspend fun retrySendMessage(transactionId: TransactionId): Result = withContext(roomDispatcher) { - runCatching { - innerTimeline.retrySend(transactionId.value) - } + override suspend fun retrySendMessage(transactionId: TransactionId): Result { + return liveTimeline.retrySendMessage(transactionId) } - override suspend fun cancelSend(transactionId: TransactionId): Result = withContext(roomDispatcher) { - runCatching { - innerTimeline.cancelSend(transactionId.value) - } + override suspend fun cancelSend(transactionId: TransactionId): Result{ + return liveTimeline.cancelSend(transactionId) } override suspend fun updateAvatar(mimeType: String, data: ByteArray): Result = withContext(roomDispatcher) { @@ -623,16 +537,8 @@ class RustMatrixRoom( description: String?, zoomLevel: Int?, assetType: AssetType?, - ): Result = withContext(roomDispatcher) { - runCatching { - innerTimeline.sendLocation( - body = body, - geoUri = geoUri, - description = description, - zoomLevel = zoomLevel?.toUByte(), - assetType = assetType?.toInner(), - ) - } + ): Result { + return liveTimeline.sendLocation(body, geoUri, description, zoomLevel, assetType) } override suspend fun createPoll( @@ -640,15 +546,8 @@ class RustMatrixRoom( answers: List, maxSelections: Int, pollKind: PollKind, - ): Result = withContext(roomDispatcher) { - runCatching { - innerTimeline.createPoll( - question = question, - answers = answers, - maxSelections = maxSelections.toUByte(), - pollKind = pollKind.toInner(), - ) - } + ): Result { + return liveTimeline.createPoll(question, answers, maxSelections, pollKind) } override suspend fun editPoll( @@ -657,46 +556,22 @@ class RustMatrixRoom( answers: List, maxSelections: Int, pollKind: PollKind, - ): Result = withContext(roomDispatcher) { - runCatching { - val pollStartEvent = - innerTimeline.getEventTimelineItemByEventId( - eventId = pollStartId.value - ) - pollStartEvent.use { - innerTimeline.editPoll( - question = question, - answers = answers, - maxSelections = maxSelections.toUByte(), - pollKind = pollKind.toInner(), - editItem = pollStartEvent, - ) - } - } + ): Result { + return liveTimeline.editPoll(pollStartId, question, answers, maxSelections, pollKind) } override suspend fun sendPollResponse( pollStartId: EventId, answers: List - ): Result = withContext(roomDispatcher) { - runCatching { - innerTimeline.sendPollResponse( - pollStartId = pollStartId.value, - answers = answers, - ) - } + ): Result { + return liveTimeline.sendPollResponse(pollStartId, answers) } override suspend fun endPoll( pollStartId: EventId, text: String - ): Result = withContext(roomDispatcher) { - runCatching { - innerTimeline.endPoll( - pollStartId = pollStartId.value, - text = text, - ) - } + ): Result { + return liveTimeline.endPoll(pollStartId, text) } override suspend fun sendVoiceMessage( @@ -704,16 +579,8 @@ class RustMatrixRoom( audioInfo: AudioInfo, waveform: List, progressCallback: ProgressCallback?, - ): Result = sendAttachment(listOf(file)) { - innerTimeline.sendVoiceMessage( - url = file.path, - audioInfo = audioInfo.map(), - waveform = waveform.toMSC3246range(), - // Maybe allow a caption in the future? - caption = null, - formattedCaption = null, - progressWatcher = progressCallback?.toProgressWatcher(), - ) + ): Result{ + return liveTimeline.sendVoiceMessage(file, audioInfo, waveform, progressCallback) } override suspend fun typingNotice(isTyping: Boolean) = runCatching { @@ -749,12 +616,6 @@ class RustMatrixRoom( innerRoom.matrixToEventPermalink(eventId.value) } - private fun sendAttachment(files: List, handle: () -> SendAttachmentJoinHandle): Result { - return runCatching { - MediaUploadHandlerImpl(files, handle()) - } - } - private fun createTimeline( timeline: InnerTimeline, isLive: Boolean = true, @@ -769,19 +630,9 @@ class RustMatrixRoom( dispatcher = roomDispatcher, lastLoginTimestamp = sessionData.loginTimestamp, onNewSyncedEvent = onNewSyncedEvent, + roomContentForwarder = roomContentForwarder, inner = timeline, - fetchDetailsForEvent = { eventId -> - runCatching { - innerTimeline.getEventTimelineItemByEventId(eventId.value) - } - } ) } - private fun messageEventContentFromParts(body: String, htmlBody: String?): RoomMessageEventContentWithoutRelation = - if (htmlBody != null) { - messageEventContentFromHtml(body, htmlBody) - } else { - messageEventContentFromMarkdown(body) - } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index a3c121fd97..43c53dcf0d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -17,11 +17,30 @@ package io.element.android.libraries.matrix.impl.timeline import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.ProgressCallback +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.TransactionId +import io.element.android.libraries.matrix.api.media.AudioInfo +import io.element.android.libraries.matrix.api.media.FileInfo +import io.element.android.libraries.matrix.api.media.ImageInfo +import io.element.android.libraries.matrix.api.media.MediaUploadHandler +import io.element.android.libraries.matrix.api.media.VideoInfo +import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.room.Mention +import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.TimelineException +import io.element.android.libraries.matrix.impl.core.toProgressWatcher +import io.element.android.libraries.matrix.impl.media.MediaUploadHandlerImpl +import io.element.android.libraries.matrix.impl.media.map +import io.element.android.libraries.matrix.impl.media.toMSC3246range +import io.element.android.libraries.matrix.impl.poll.toInner +import io.element.android.libraries.matrix.impl.room.RoomContentForwarder +import io.element.android.libraries.matrix.impl.room.location.toInner +import io.element.android.libraries.matrix.impl.room.map import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessageMapper import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper @@ -48,10 +67,19 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.matrix.rustcomponents.sdk.EventTimelineItem +import org.matrix.rustcomponents.sdk.FormattedBody +import org.matrix.rustcomponents.sdk.MessageFormat +import org.matrix.rustcomponents.sdk.RoomMessageEventContentWithoutRelation +import org.matrix.rustcomponents.sdk.SendAttachmentJoinHandle import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineItem +import org.matrix.rustcomponents.sdk.messageEventContentFromHtml +import org.matrix.rustcomponents.sdk.messageEventContentFromMarkdown +import org.matrix.rustcomponents.sdk.use import timber.log.Timber import uniffi.matrix_sdk_ui.EventItemOrigin +import java.io.File import java.util.Date import java.util.concurrent.atomic.AtomicBoolean import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline @@ -68,7 +96,7 @@ class RustTimeline( private val matrixRoom: MatrixRoom, private val dispatcher: CoroutineDispatcher, private val lastLoginTimestamp: Date?, - private val fetchDetailsForEvent: suspend (EventId) -> Result, + private val roomContentForwarder: RoomContentForwarder, private val onNewSyncedEvent: () -> Unit, ) : Timeline { @@ -90,7 +118,7 @@ class RustTimeline( private val invisibleIndicatorPostProcessor = InvisibleIndicatorPostProcessor(isLive) private val timelineItemFactory = MatrixTimelineItemMapper( - fetchDetailsForEvent = fetchDetailsForEvent, + fetchDetailsForEvent = this::fetchDetailsForEvent, roomCoroutineScope = roomCoroutineScope, virtualTimelineItemMapper = VirtualTimelineItemMapper(), eventTimelineItemMapper = EventTimelineItemMapper( @@ -138,7 +166,7 @@ class RustTimeline( } } - private fun updatePaginationStatus(direction: Timeline.PaginationDirection, update: (Timeline.PaginationStatus)->Timeline.PaginationStatus){ + private fun updatePaginationStatus(direction: Timeline.PaginationDirection, update: (Timeline.PaginationStatus) -> Timeline.PaginationStatus) { when (direction) { Timeline.PaginationDirection.BACKWARDS -> backPaginationStatus.getAndUpdate(update) Timeline.PaginationDirection.FORWARDS -> forwardPaginationStatus.getAndUpdate(update) @@ -204,6 +232,7 @@ class RustTimeline( override fun close() { inner.close() + specialModeEventTimelineItem?.destroy() } private suspend fun fetchMembers() = withContext(dispatcher) { @@ -229,4 +258,266 @@ class RustTimeline( initLatch.await() timelineDiffProcessor.postDiffs(diffs) } + + override suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result = withContext(dispatcher) { + messageEventContentFromParts(body, htmlBody).withMentions(mentions.map()).use { content -> + runCatching { + inner.send(content) + } + } + } + + override suspend fun editMessage( + originalEventId: EventId?, + transactionId: TransactionId?, + body: String, + htmlBody: String?, + mentions: List, + ): Result = + withContext(dispatcher) { + if (originalEventId != null) { + runCatching { + val editedEvent = specialModeEventTimelineItem ?: inner.getEventTimelineItemByEventId(originalEventId.value) + editedEvent.use { + inner.edit( + newContent = messageEventContentFromParts(body, htmlBody).withMentions(mentions.map()), + editItem = it, + ) + } + specialModeEventTimelineItem = null + } + } else { + runCatching { + transactionId?.let { cancelSend(it) } + inner.send(messageEventContentFromParts(body, htmlBody)) + } + } + } + + private var specialModeEventTimelineItem: EventTimelineItem? = null + + override suspend fun enterSpecialMode(eventId: EventId?): Result = withContext(dispatcher) { + runCatching { + specialModeEventTimelineItem?.destroy() + specialModeEventTimelineItem = null + specialModeEventTimelineItem = eventId?.let { inner.getEventTimelineItemByEventId(it.value) } + } + } + + override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result = withContext(dispatcher) { + runCatching { + val inReplyTo = specialModeEventTimelineItem ?: inner.getEventTimelineItemByEventId(eventId.value) + inReplyTo.use { eventTimelineItem -> + inner.sendReply(messageEventContentFromParts(body, htmlBody).withMentions(mentions.map()), eventTimelineItem) + } + specialModeEventTimelineItem = null + } + } + + override suspend fun sendImage( + file: File, + thumbnailFile: File?, + imageInfo: ImageInfo, + body: String?, + formattedBody: String?, + progressCallback: ProgressCallback?, + ): Result { + return sendAttachment(listOfNotNull(file, thumbnailFile)) { + inner.sendImage( + url = file.path, + thumbnailUrl = thumbnailFile?.path, + imageInfo = imageInfo.map(), + caption = body, + formattedCaption = formattedBody?.let { + FormattedBody(body = it, format = MessageFormat.Html) + }, + progressWatcher = progressCallback?.toProgressWatcher() + ) + } + } + + override suspend fun sendVideo( + file: File, + thumbnailFile: File?, + videoInfo: VideoInfo, + body: String?, + formattedBody: String?, + progressCallback: ProgressCallback?, + ): Result { + return sendAttachment(listOfNotNull(file, thumbnailFile)) { + inner.sendVideo( + url = file.path, + thumbnailUrl = thumbnailFile?.path, + videoInfo = videoInfo.map(), + caption = body, + formattedCaption = formattedBody?.let { + FormattedBody(body = it, format = MessageFormat.Html) + }, + progressWatcher = progressCallback?.toProgressWatcher() + ) + } + } + + override suspend fun sendAudio(file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?): Result { + return sendAttachment(listOf(file)) { + inner.sendAudio( + url = file.path, + audioInfo = audioInfo.map(), + // Maybe allow a caption in the future? + caption = null, + formattedCaption = null, + progressWatcher = progressCallback?.toProgressWatcher() + ) + } + } + + override suspend fun sendFile(file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?): Result { + return sendAttachment(listOf(file)) { + inner.sendFile(file.path, fileInfo.map(), progressCallback?.toProgressWatcher()) + } + } + + override suspend fun toggleReaction(emoji: String, eventId: EventId): Result = withContext(dispatcher) { + runCatching { + inner.toggleReaction(key = emoji, eventId = eventId.value) + } + } + + override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result = withContext(dispatcher) { + runCatching { + roomContentForwarder.forward(fromTimeline = inner, eventId = eventId, toRoomIds = roomIds) + }.onFailure { + Timber.e(it) + } + } + + override suspend fun retrySendMessage(transactionId: TransactionId): Result = withContext(dispatcher) { + runCatching { + inner.retrySend(transactionId.value) + } + } + + override suspend fun cancelSend(transactionId: TransactionId): Result = withContext(dispatcher) { + runCatching { + inner.cancelSend(transactionId.value) + } + } + + override suspend fun sendLocation( + body: String, + geoUri: String, + description: String?, + zoomLevel: Int?, + assetType: AssetType?, + ): Result = withContext(dispatcher) { + runCatching { + inner.sendLocation( + body = body, + geoUri = geoUri, + description = description, + zoomLevel = zoomLevel?.toUByte(), + assetType = assetType?.toInner(), + ) + } + } + + override suspend fun createPoll( + question: String, + answers: List, + maxSelections: Int, + pollKind: PollKind, + ): Result = withContext(dispatcher) { + runCatching { + inner.createPoll( + question = question, + answers = answers, + maxSelections = maxSelections.toUByte(), + pollKind = pollKind.toInner(), + ) + } + } + + override suspend fun editPoll( + pollStartId: EventId, + question: String, + answers: List, + maxSelections: Int, + pollKind: PollKind, + ): Result = withContext(dispatcher) { + runCatching { + val pollStartEvent = + inner.getEventTimelineItemByEventId( + eventId = pollStartId.value + ) + pollStartEvent.use { + inner.editPoll( + question = question, + answers = answers, + maxSelections = maxSelections.toUByte(), + pollKind = pollKind.toInner(), + editItem = pollStartEvent, + ) + } + } + } + + override suspend fun sendPollResponse( + pollStartId: EventId, + answers: List + ): Result = withContext(dispatcher) { + runCatching { + inner.sendPollResponse( + pollStartId = pollStartId.value, + answers = answers, + ) + } + } + + override suspend fun endPoll( + pollStartId: EventId, + text: String + ): Result = withContext(dispatcher) { + runCatching { + inner.endPoll( + pollStartId = pollStartId.value, + text = text, + ) + } + } + + override suspend fun sendVoiceMessage( + file: File, + audioInfo: AudioInfo, + waveform: List, + progressCallback: ProgressCallback?, + ): Result = sendAttachment(listOf(file)) { + inner.sendVoiceMessage( + url = file.path, + audioInfo = audioInfo.map(), + waveform = waveform.toMSC3246range(), + // Maybe allow a caption in the future? + caption = null, + formattedCaption = null, + progressWatcher = progressCallback?.toProgressWatcher(), + ) + } + + private fun messageEventContentFromParts(body: String, htmlBody: String?): RoomMessageEventContentWithoutRelation = + if (htmlBody != null) { + messageEventContentFromHtml(body, htmlBody) + } else { + messageEventContentFromMarkdown(body) + } + + private fun sendAttachment(files: List, handle: () -> SendAttachmentJoinHandle): Result { + return runCatching { + MediaUploadHandlerImpl(files, handle()) + } + } + + private fun fetchDetailsForEvent(eventId: EventId): Result { + return runCatching { + inner.getEventTimelineItemByEventId(eventId.value) + } + } } From d5b13704cd3f8531d379410472040c31a89c7bc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:18:39 +0000 Subject: [PATCH 145/289] Update dependency com.posthog:posthog-android to v3.1.18 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 990ac198ae..86910e348a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -175,7 +175,7 @@ opusencoder = "io.element.android:opusencoder:1.1.0" kotlinpoet = "com.squareup:kotlinpoet:1.16.0" # Analytics -posthog = "com.posthog:posthog-android:3.1.17" +posthog = "com.posthog:posthog-android:3.1.18" sentry = "io.sentry:sentry-android:7.8.0" # Note: only 0.19.0 will compile properly # main branch can be tested replacing the version with main-SNAPSHOT From 1de679767315674b5db42898b703bae715dee98c Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Wed, 24 Apr 2024 15:55:25 +0200 Subject: [PATCH 146/289] Remove `SessionData.needsVerification` as the source of truth for session verification status (#2748) * Remove `SessionData.needsVerification` as the source of truth for session verification status. - Use the Rust SDK `EncryptionService.verificationState()` instead, but always waiting for the first 'known' result (either verified or not, discarding 'unknown'). - Add a workaround in the super rare case when reading this value gets stuck somehow. We'll assume the user is not verified in that case. - Make `DefaultFtueService.getNextStep` and dependent checks `suspend`. - Make the `skip` button use a value in the session preferences instead. * Log exception when the verification status can't be loaded Co-authored-by: Benoit Marty * Fix review comments --------- Co-authored-by: Benoit Marty --- changelog.d/2718.bugfix | 1 + features/ftue/impl/build.gradle.kts | 2 + .../features/ftue/impl/FtueFlowNode.kt | 2 +- .../ftue/impl/state/DefaultFtueService.kt | 47 ++++++++++++------ .../ftue/impl/DefaultFtueServiceTests.kt | 6 ++- .../signedout/impl/SignedOutStateProvider.kt | 2 - features/verifysession/impl/build.gradle.kts | 2 + .../impl/VerifySelfSessionPresenter.kt | 10 ++-- .../impl/VerifySelfSessionPresenterTests.kt | 12 +++-- .../SessionVerificationService.kt | 16 ------ .../libraries/matrix/impl/RustMatrixClient.kt | 4 -- .../auth/RustMatrixAuthenticationService.kt | 2 - .../impl/encryption/RustEncryptionService.kt | 7 +-- .../libraries/matrix/impl/mapper/Session.kt | 2 - .../RustSessionVerificationService.kt | 23 ++------- .../FakeSessionVerificationService.kt | 15 +----- .../api/store/SessionPreferencesStore.kt | 3 ++ .../store/DefaultSessionPreferencesStore.kt | 4 ++ .../test/InMemorySessionPreferencesStore.kt | 10 ++++ .../sessionstorage/api/SessionData.kt | 2 - .../sessionstorage/impl/SessionDataMapper.kt | 2 - .../impl/src/main/sqldelight/databases/7.db | Bin 0 -> 12288 bytes .../libraries/matrix/session/SessionData.sq | 4 +- .../impl/src/main/sqldelight/migrations/6.sqm | 20 ++++++++ .../impl/DatabaseSessionStoreTests.kt | 6 --- .../libraries/sessionstorage/impl/Fixtures.kt | 1 - 26 files changed, 99 insertions(+), 106 deletions(-) create mode 100644 changelog.d/2718.bugfix create mode 100644 libraries/session-storage/impl/src/main/sqldelight/databases/7.db create mode 100644 libraries/session-storage/impl/src/main/sqldelight/migrations/6.sqm diff --git a/changelog.d/2718.bugfix b/changelog.d/2718.bugfix new file mode 100644 index 0000000000..999d47b59b --- /dev/null +++ b/changelog.d/2718.bugfix @@ -0,0 +1 @@ +Fix session verification being asked again for already verified users. diff --git a/features/ftue/impl/build.gradle.kts b/features/ftue/impl/build.gradle.kts index 06251cfe5d..e42763d97c 100644 --- a/features/ftue/impl/build.gradle.kts +++ b/features/ftue/impl/build.gradle.kts @@ -39,6 +39,7 @@ dependencies { implementation(projects.libraries.matrix.api) implementation(projects.libraries.matrixui) implementation(projects.libraries.designsystem) + implementation(projects.libraries.preferences.api) implementation(projects.libraries.uiStrings) implementation(projects.libraries.testtags) implementation(projects.features.analytics.api) @@ -60,6 +61,7 @@ dependencies { testImplementation(projects.services.analytics.test) testImplementation(projects.libraries.permissions.impl) testImplementation(projects.libraries.permissions.test) + testImplementation(projects.libraries.preferences.test) testImplementation(projects.features.lockscreen.test) testImplementation(projects.tests.testutils) diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt index cb77100d94..3616faf2ae 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt @@ -143,7 +143,7 @@ class FtueFlowNode @AssistedInject constructor( } } - private fun moveToNextStep() { + private fun moveToNextStep() = lifecycleScope.launch { when (ftueState.getNextStep()) { FtueStep.SessionVerification -> { backstack.newRoot(NavTarget.SessionVerification) diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt index 87b7c3a7ee..0e8aa54f81 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt @@ -23,18 +23,26 @@ import com.squareup.anvil.annotations.ContributesBinding import io.element.android.features.ftue.api.state.FtueService import io.element.android.features.ftue.api.state.FtueState import io.element.android.features.lockscreen.api.LockScreenService +import io.element.android.features.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.verification.SessionVerificationService +import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus import io.element.android.libraries.permissions.api.PermissionStateProvider import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.timeout import kotlinx.coroutines.runBlocking +import timber.log.Timber import javax.inject.Inject +import kotlin.time.Duration.Companion.seconds @ContributesBinding(SessionScope::class) class DefaultFtueService @Inject constructor( @@ -44,6 +52,7 @@ class DefaultFtueService @Inject constructor( private val permissionStateProvider: PermissionStateProvider, private val lockScreenService: LockScreenService, private val sessionVerificationService: SessionVerificationService, + private val sessionPreferencesStore: SessionPreferencesStore, ) : FtueService { override val state = MutableStateFlow(FtueState.Unknown) @@ -55,7 +64,7 @@ class DefaultFtueService @Inject constructor( } init { - sessionVerificationService.needsVerificationFlow + sessionVerificationService.sessionVerifiedStatus .onEach { updateState() } .launchIn(coroutineScope) @@ -64,7 +73,7 @@ class DefaultFtueService @Inject constructor( .launchIn(coroutineScope) } - fun getNextStep(currentStep: FtueStep? = null): FtueStep? = + suspend fun getNextStep(currentStep: FtueStep? = null): FtueStep? = when (currentStep) { null -> if (isSessionNotVerified()) { FtueStep.SessionVerification @@ -89,8 +98,8 @@ class DefaultFtueService @Inject constructor( FtueStep.AnalyticsOptIn -> null } - private fun isAnyStepIncomplete(): Boolean { - return listOf( + private suspend fun isAnyStepIncomplete(): Boolean { + return listOf Boolean>( { isSessionNotVerified() }, { shouldAskNotificationPermissions() }, { needsAnalyticsOptIn() }, @@ -98,16 +107,28 @@ class DefaultFtueService @Inject constructor( ).any { it() } } - private fun isSessionNotVerified(): Boolean { - return sessionVerificationService.needsVerificationFlow.value + @OptIn(FlowPreview::class) + private suspend fun isSessionNotVerified(): Boolean { + // Wait for the first known (or ready) verification status + val readyVerifiedSessionStatus = sessionVerificationService.sessionVerifiedStatus + .filter { it != SessionVerifiedStatus.Unknown } + // This is not ideal, but there are some very rare cases when reading the flow seems to get stuck + .timeout(5.seconds) + .catch { + Timber.e(it, "Failed to get session verification status, assume it's not verified") + emit(SessionVerifiedStatus.NotVerified) + } + .first() + val skipVerification = suspend { sessionPreferencesStore.isSessionVerificationSkipped().first() } + return readyVerifiedSessionStatus == SessionVerifiedStatus.NotVerified && !skipVerification() } - private fun needsAnalyticsOptIn(): Boolean { + private suspend fun needsAnalyticsOptIn(): Boolean { // We need this function to not be suspend, so we need to load the value through runBlocking - return runBlocking { analyticsService.didAskUserConsent().first().not() } + return analyticsService.didAskUserConsent().first().not() } - private fun shouldAskNotificationPermissions(): Boolean { + private suspend fun shouldAskNotificationPermissions(): Boolean { return if (sdkVersionProvider.isAtLeast(Build.VERSION_CODES.TIRAMISU)) { val permission = Manifest.permission.POST_NOTIFICATIONS val isPermissionDenied = runBlocking { permissionStateProvider.isPermissionDenied(permission).first() } @@ -118,14 +139,12 @@ class DefaultFtueService @Inject constructor( } } - private fun shouldDisplayLockscreenSetup(): Boolean { - return runBlocking { - lockScreenService.isSetupRequired().first() - } + private suspend fun shouldDisplayLockscreenSetup(): Boolean { + return lockScreenService.isSetupRequired().first() } @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - internal fun updateState() { + internal suspend fun updateState() { state.value = when { isAnyStepIncomplete() -> FtueState.Incomplete else -> FtueState.Complete diff --git a/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTests.kt b/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTests.kt index d381d945a9..9cc3db8d29 100644 --- a/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTests.kt +++ b/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTests.kt @@ -24,6 +24,7 @@ import io.element.android.features.ftue.impl.state.DefaultFtueService import io.element.android.features.ftue.impl.state.FtueStep import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.lockscreen.test.FakeLockScreenService +import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService import io.element.android.libraries.permissions.impl.FakePermissionStateProvider @@ -90,7 +91,6 @@ class DefaultFtueServiceTests { fun `traverse flow`() = runTest { val sessionVerificationService = FakeSessionVerificationService().apply { givenVerifiedStatus(SessionVerifiedStatus.NotVerified) - givenNeedsVerification(true) } val analyticsService = FakeAnalyticsService() val permissionStateProvider = FakePermissionStateProvider(permissionGranted = false) @@ -108,7 +108,7 @@ class DefaultFtueServiceTests { // Session verification steps.add(state.getNextStep(steps.lastOrNull())) - sessionVerificationService.givenNeedsVerification(false) + sessionVerificationService.givenVerifiedStatus(SessionVerifiedStatus.NotVerified) // Notifications opt in steps.add(state.getNextStep(steps.lastOrNull())) @@ -200,6 +200,7 @@ class DefaultFtueServiceTests { analyticsService: AnalyticsService = FakeAnalyticsService(), permissionStateProvider: FakePermissionStateProvider = FakePermissionStateProvider(permissionGranted = false), lockScreenService: LockScreenService = FakeLockScreenService(), + sessionPreferencesStore: InMemorySessionPreferencesStore = InMemorySessionPreferencesStore(), // First version where notification permission is required sdkIntVersion: Int = Build.VERSION_CODES.TIRAMISU, ) = DefaultFtueService( @@ -209,5 +210,6 @@ class DefaultFtueServiceTests { analyticsService = analyticsService, permissionStateProvider = permissionStateProvider, lockScreenService = lockScreenService, + sessionPreferencesStore = sessionPreferencesStore, ) } diff --git a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutStateProvider.kt b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutStateProvider.kt index 9827d8d720..df3549b0f8 100644 --- a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutStateProvider.kt +++ b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutStateProvider.kt @@ -38,7 +38,6 @@ fun aSignedOutState() = SignedOutState( fun aSessionData( sessionId: SessionId = SessionId("@alice:server.org"), isTokenValid: Boolean = false, - needsVerification: Boolean = false, ): SessionData { return SessionData( userId = sessionId.value, @@ -52,6 +51,5 @@ fun aSessionData( isTokenValid = isTokenValid, loginType = LoginType.UNKNOWN, passphrase = null, - needsVerification = needsVerification, ) } diff --git a/features/verifysession/impl/build.gradle.kts b/features/verifysession/impl/build.gradle.kts index 3f62c6898e..38cb453a05 100644 --- a/features/verifysession/impl/build.gradle.kts +++ b/features/verifysession/impl/build.gradle.kts @@ -42,6 +42,7 @@ dependencies { implementation(projects.libraries.matrix.api) implementation(projects.libraries.matrixui) implementation(projects.libraries.designsystem) + implementation(projects.libraries.preferences.api) implementation(projects.libraries.uiStrings) api(libs.statemachine) api(projects.features.verifysession.api) @@ -53,6 +54,7 @@ dependencies { testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(projects.libraries.matrix.test) + testImplementation(projects.libraries.preferences.test) testImplementation(projects.tests.testutils) testImplementation(libs.androidx.compose.ui.test.junit) testReleaseImplementation(libs.androidx.compose.ui.test.manifest) diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenter.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenter.kt index c09b48946d..e414f1b746 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenter.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenter.kt @@ -23,11 +23,11 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.freeletics.flowredux.compose.rememberStateAndDispatch +import io.element.android.features.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta @@ -49,6 +49,7 @@ class VerifySelfSessionPresenter @Inject constructor( private val encryptionService: EncryptionService, private val stateMachine: VerifySelfSessionStateMachine, private val buildMeta: BuildMeta, + private val sessionPreferencesStore: SessionPreferencesStore, ) : Presenter { @Composable override fun present(): VerifySelfSessionState { @@ -59,8 +60,8 @@ class VerifySelfSessionPresenter @Inject constructor( } val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState() val stateAndDispatch = stateMachine.rememberStateAndDispatch() - var skipVerification by remember { mutableStateOf(false) } - val needsVerification by sessionVerificationService.needsVerificationFlow.collectAsState() + val skipVerification by sessionPreferencesStore.isSessionVerificationSkipped().collectAsState(initial = false) + val needsVerification by sessionVerificationService.canVerifySessionFlow.collectAsState(initial = true) val verificationFlowStep by remember { derivedStateOf { when { @@ -86,8 +87,7 @@ class VerifySelfSessionPresenter @Inject constructor( VerifySelfSessionViewEvents.Cancel -> stateAndDispatch.dispatchAction(StateMachineEvent.Cancel) VerifySelfSessionViewEvents.Reset -> stateAndDispatch.dispatchAction(StateMachineEvent.Reset) VerifySelfSessionViewEvents.SkipVerification -> coroutineScope.launch { - sessionVerificationService.saveVerifiedState(true) - skipVerification = true + sessionPreferencesStore.setSkipSessionVerification(true) } } } diff --git a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt index 06f69e1628..9100cc65c9 100644 --- a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt +++ b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt @@ -24,6 +24,7 @@ import com.google.common.truth.Truth.assertThat import io.element.android.features.verifysession.impl.VerifySelfSessionState.VerificationStep import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.meta.BuildMeta +import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.encryption.RecoveryState import io.element.android.libraries.matrix.api.verification.SessionVerificationData @@ -35,7 +36,6 @@ import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.matrix.test.encryption.FakeEncryptionService import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService import io.element.android.tests.testutils.WarmUpRule -import io.element.android.tests.testutils.lambda.value import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.Rule @@ -289,7 +289,6 @@ class VerifySelfSessionPresenterTests { }.test { val state = requestVerificationAndAwaitVerifyingState(service) state.eventSink(VerifySelfSessionViewEvents.SkipVerification) - service.saveVerifiedStateResult.assertions().isCalledOnce().with(value(true)) assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Skipped) } } @@ -297,12 +296,16 @@ class VerifySelfSessionPresenterTests { @Test fun `present - When verification is not needed, the flow is completed`() = runTest { val service = FakeSessionVerificationService().apply { - givenNeedsVerification(false) + givenCanVerifySession(false) + givenIsReady(true) + givenVerifiedStatus(SessionVerifiedStatus.Verified) + givenVerificationFlowState(VerificationFlowState.Finished) } val presenter = createVerifySelfSessionPresenter(service) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { + skipItems(1) assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Completed) } } @@ -334,7 +337,6 @@ class VerifySelfSessionPresenterTests { private fun unverifiedSessionService(): FakeSessionVerificationService { return FakeSessionVerificationService().apply { givenVerifiedStatus(SessionVerifiedStatus.NotVerified) - givenNeedsVerification(true) } } @@ -342,12 +344,14 @@ class VerifySelfSessionPresenterTests { service: SessionVerificationService = unverifiedSessionService(), encryptionService: EncryptionService = FakeEncryptionService(), buildMeta: BuildMeta = aBuildMeta(), + sessionPreferencesStore: InMemorySessionPreferencesStore = InMemorySessionPreferencesStore(), ): VerifySelfSessionPresenter { return VerifySelfSessionPresenter( sessionVerificationService = service, encryptionService = encryptionService, stateMachine = VerifySelfSessionStateMachine(service, encryptionService), buildMeta = buildMeta, + sessionPreferencesStore = sessionPreferencesStore, ) } } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/verification/SessionVerificationService.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/verification/SessionVerificationService.kt index b82dd23188..8d22fc174e 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/verification/SessionVerificationService.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/verification/SessionVerificationService.kt @@ -21,17 +21,6 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow interface SessionVerificationService { - /** - * This flow stores the local verification status of the current session. - * - * We should ideally base the verified status in the Rust SDK info, but there are several issues with that approach: - * - * - The SDK takes a while to report this value, resulting in a delay of 1-2s in displaying the UI. - * - We need to add a 'Skip' option for testing purposes, which would not be possible if we relied only on the SDK. - * - The SDK sometimes doesn't report the verification state if there is no network connection when the app boots. - */ - val needsVerificationFlow: StateFlow - /** * State of the current verification flow ([VerificationFlowState.Initial] if not started). */ @@ -83,11 +72,6 @@ interface SessionVerificationService { * Returns the verification service state to the initial step. */ suspend fun reset() - - /** - * Saves the current session state as [verified]. - */ - suspend fun saveVerifiedState(verified: Boolean) } /** Verification status of the current session. */ diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index a24c4a35bb..91036df1cc 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -160,7 +160,6 @@ class RustMatrixClient( syncService = rustSyncService, sessionCoroutineScope = sessionCoroutineScope, dispatchers = dispatchers, - sessionStore = sessionStore, ) private val roomDirectoryService = RustRoomDirectoryService( @@ -188,7 +187,6 @@ class RustMatrixClient( isTokenValid = false, loginType = existingData.loginType, passphrase = existingData.passphrase, - needsVerification = existingData.needsVerification, ) sessionStore.updateData(newData) Timber.d("Removed session data with token: '...$anonymizedToken'.") @@ -216,7 +214,6 @@ class RustMatrixClient( isTokenValid = true, loginType = existingData.loginType, passphrase = existingData.passphrase, - needsVerification = existingData.needsVerification, ) sessionStore.updateData(newData) Timber.d("Saved new session data with token: '...$anonymizedToken'.") @@ -242,7 +239,6 @@ class RustMatrixClient( client = client, isSyncServiceReady = rustSyncService.syncState.map { it == SyncState.Running }, sessionCoroutineScope = sessionCoroutineScope, - sessionStore = sessionStore, ) private val eventFilters = TimelineConfig.excludedEvents diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt index 0ac0ce94f3..50d82c1e3a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt @@ -138,7 +138,6 @@ class RustMatrixAuthenticationService @Inject constructor( isTokenValid = true, loginType = LoginType.PASSWORD, passphrase = pendingPassphrase, - needsVerification = true, ) } sessionStore.storeData(sessionData) @@ -187,7 +186,6 @@ class RustMatrixAuthenticationService @Inject constructor( isTokenValid = true, loginType = LoginType.OIDC, passphrase = pendingPassphrase, - needsVerification = true, ) } pendingOidcAuthenticationData?.close() diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/encryption/RustEncryptionService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/encryption/RustEncryptionService.kt index 25881c2174..f5a6390989 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/encryption/RustEncryptionService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/encryption/RustEncryptionService.kt @@ -25,7 +25,6 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.encryption.RecoveryState import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.libraries.matrix.impl.sync.RustSyncService -import io.element.android.libraries.sessionstorage.api.SessionStore import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.currentCoroutineContext @@ -49,11 +48,10 @@ import org.matrix.rustcomponents.sdk.EnableRecoveryProgress as RustEnableRecover import org.matrix.rustcomponents.sdk.SteadyStateException as RustSteadyStateException internal class RustEncryptionService( - private val client: Client, + client: Client, syncService: RustSyncService, sessionCoroutineScope: CoroutineScope, private val dispatchers: CoroutineDispatchers, - private val sessionStore: SessionStore, ) : EncryptionService { private val service: Encryption = client.encryption() @@ -188,9 +186,6 @@ internal class RustEncryptionService( override suspend fun recover(recoveryKey: String): Result = withContext(dispatchers.io) { runCatching { service.recover(recoveryKey) - val existingSession = sessionStore.getSession(client.userId()) - ?: error("Failed to save verification state. No session with id ${client.userId()}") - sessionStore.updateData(existingSession.copy(needsVerification = false)) }.mapFailure { it.mapRecoveryException() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/mapper/Session.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/mapper/Session.kt index 3c1e3c40ec..aea838b705 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/mapper/Session.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/mapper/Session.kt @@ -25,7 +25,6 @@ internal fun Session.toSessionData( isTokenValid: Boolean, loginType: LoginType, passphrase: String?, - needsVerification: Boolean, ) = SessionData( userId = userId, deviceId = deviceId, @@ -38,5 +37,4 @@ internal fun Session.toSessionData( isTokenValid = isTokenValid, loginType = loginType, passphrase = passphrase, - needsVerification = needsVerification, ) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/RustSessionVerificationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/RustSessionVerificationService.kt index 3d2fe0cc40..88403e8928 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/RustSessionVerificationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/RustSessionVerificationService.kt @@ -16,7 +16,6 @@ package io.element.android.libraries.matrix.impl.verification -import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.matrix.api.verification.SessionVerificationData import io.element.android.libraries.matrix.api.verification.SessionVerificationService @@ -24,7 +23,6 @@ import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatu import io.element.android.libraries.matrix.api.verification.VerificationEmoji import io.element.android.libraries.matrix.api.verification.VerificationFlowState import io.element.android.libraries.matrix.impl.util.cancelAndDestroy -import io.element.android.libraries.sessionstorage.api.SessionStore import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow @@ -33,10 +31,7 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch @@ -58,7 +53,6 @@ class RustSessionVerificationService( private val client: Client, isSyncServiceReady: Flow, private val sessionCoroutineScope: CoroutineScope, - private val sessionStore: SessionStore, ) : SessionVerificationService, SessionVerificationControllerDelegate { private val encryptionService: Encryption = client.encryption() private lateinit var verificationController: SessionVerificationController @@ -80,11 +74,6 @@ class RustSessionVerificationService( } }) - override val needsVerificationFlow: StateFlow = sessionStore.sessionsFlow() - .map { sessions -> sessions.firstOrNull { it.userId == client.userId() }?.needsVerification.orFalse() } - .distinctUntilChanged() - .stateIn(sessionCoroutineScope, SharingStarted.Eagerly, false) - private val _verificationFlowState = MutableStateFlow(VerificationFlowState.Initial) override val verificationFlowState = _verificationFlowState.asStateFlow() @@ -98,6 +87,9 @@ class RustSessionVerificationService( } init { + // Update initial state in case sliding sync isn't ready + updateVerificationStatus(encryptionService.verificationState()) + isReady.onEach { isReady -> if (isReady) { Timber.d("Starting verification service") @@ -165,7 +157,6 @@ class RustSessionVerificationService( } } .onSuccess { - saveVerifiedState(true) updateVerificationStatus(VerificationState.VERIFIED) _verificationFlowState.value = VerificationFlowState.Finished } @@ -195,14 +186,6 @@ class RustSessionVerificationService( _verificationFlowState.value = VerificationFlowState.Initial } - override suspend fun saveVerifiedState(verified: Boolean) = tryOrFail { - val existingSession = sessionStore.getSession(client.userId()) - ?: error("Failed to save verification state. No session with id ${client.userId()}") - sessionStore.updateData(existingSession.copy(needsVerification = !verified)) - // Wait until the new state is saved - needsVerificationFlow.first { needsVerification -> !needsVerification } - } - fun destroy() { Timber.d("Destroying RustSessionVerificationService") verificationStateListenerTaskHandle.cancelAndDestroy() diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/verification/FakeSessionVerificationService.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/verification/FakeSessionVerificationService.kt index 7823910263..64c7c8ab97 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/verification/FakeSessionVerificationService.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/verification/FakeSessionVerificationService.kt @@ -20,22 +20,17 @@ import io.element.android.libraries.matrix.api.verification.SessionVerificationD import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus import io.element.android.libraries.matrix.api.verification.VerificationFlowState -import io.element.android.tests.testutils.lambda.LambdaOneParamRecorder -import io.element.android.tests.testutils.lambda.lambdaRecorder import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -class FakeSessionVerificationService( - var saveVerifiedStateResult: LambdaOneParamRecorder = lambdaRecorder {} -) : SessionVerificationService { +class FakeSessionVerificationService : SessionVerificationService { private val _isReady = MutableStateFlow(false) private val _sessionVerifiedStatus = MutableStateFlow(SessionVerifiedStatus.Unknown) private var _verificationFlowState = MutableStateFlow(VerificationFlowState.Initial) private var _canVerifySessionFlow = MutableStateFlow(true) var shouldFail = false - override val needsVerificationFlow: MutableStateFlow = MutableStateFlow(false) override val verificationFlowState: StateFlow = _verificationFlowState override val sessionVerifiedStatus: StateFlow = _sessionVerifiedStatus override val canVerifySessionFlow: Flow = _canVerifySessionFlow @@ -94,15 +89,7 @@ class FakeSessionVerificationService( _isReady.value = value } - fun givenNeedsVerification(value: Boolean) { - needsVerificationFlow.value = value - } - override suspend fun reset() { _verificationFlowState.value = VerificationFlowState.Initial } - - override suspend fun saveVerifiedState(verified: Boolean) { - saveVerifiedStateResult(verified) - } } diff --git a/libraries/preferences/api/src/main/kotlin/io/element/android/features/preferences/api/store/SessionPreferencesStore.kt b/libraries/preferences/api/src/main/kotlin/io/element/android/features/preferences/api/store/SessionPreferencesStore.kt index 948e9acb75..9bbeadc709 100644 --- a/libraries/preferences/api/src/main/kotlin/io/element/android/features/preferences/api/store/SessionPreferencesStore.kt +++ b/libraries/preferences/api/src/main/kotlin/io/element/android/features/preferences/api/store/SessionPreferencesStore.kt @@ -34,5 +34,8 @@ interface SessionPreferencesStore { suspend fun setRenderTypingNotifications(enabled: Boolean) fun isRenderTypingNotificationsEnabled(): Flow + suspend fun setSkipSessionVerification(skip: Boolean) + fun isSessionVerificationSkipped(): Flow + suspend fun clear() } diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt index 05bbe9c048..41b52d87f0 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt @@ -49,6 +49,7 @@ class DefaultSessionPreferencesStore( private val renderReadReceiptsKey = booleanPreferencesKey("renderReadReceipts") private val sendTypingNotificationsKey = booleanPreferencesKey("sendTypingNotifications") private val renderTypingNotificationsKey = booleanPreferencesKey("renderTypingNotifications") + private val skipSessionVerification = booleanPreferencesKey("skipSessionVerification") private val dataStoreFile = storeFile(context, sessionId) private val store = PreferenceDataStoreFactory.create( @@ -86,6 +87,9 @@ class DefaultSessionPreferencesStore( override suspend fun setRenderTypingNotifications(enabled: Boolean) = update(renderTypingNotificationsKey, enabled) override fun isRenderTypingNotificationsEnabled(): Flow = get(renderTypingNotificationsKey) { true } + override suspend fun setSkipSessionVerification(skip: Boolean) = update(skipSessionVerification, skip) + override fun isSessionVerificationSkipped(): Flow = get(skipSessionVerification) { false } + override suspend fun clear() { dataStoreFile.safeDelete() } diff --git a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemorySessionPreferencesStore.kt b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemorySessionPreferencesStore.kt index 9e9fc7ba2a..16f98d0870 100644 --- a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemorySessionPreferencesStore.kt +++ b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemorySessionPreferencesStore.kt @@ -26,12 +26,14 @@ class InMemorySessionPreferencesStore( isRenderReadReceiptsEnabled: Boolean = true, isSendTypingNotificationsEnabled: Boolean = true, isRenderTypingNotificationsEnabled: Boolean = true, + isSessionVerificationSkipped: Boolean = false, ) : SessionPreferencesStore { private val isSharePresenceEnabled = MutableStateFlow(isSharePresenceEnabled) private val isSendPublicReadReceiptsEnabled = MutableStateFlow(isSendPublicReadReceiptsEnabled) private val isRenderReadReceiptsEnabled = MutableStateFlow(isRenderReadReceiptsEnabled) private val isSendTypingNotificationsEnabled = MutableStateFlow(isSendTypingNotificationsEnabled) private val isRenderTypingNotificationsEnabled = MutableStateFlow(isRenderTypingNotificationsEnabled) + private val isSessionVerificationSkipped = MutableStateFlow(isSessionVerificationSkipped) var clearCallCount = 0 private set @@ -65,6 +67,14 @@ class InMemorySessionPreferencesStore( override fun isRenderTypingNotificationsEnabled(): Flow = isRenderTypingNotificationsEnabled + override suspend fun setSkipSessionVerification(skip: Boolean) { + isSessionVerificationSkipped.tryEmit(skip) + } + + override fun isSessionVerificationSkipped(): Flow { + return isSessionVerificationSkipped + } + override suspend fun clear() { clearCallCount++ isSendPublicReadReceiptsEnabled.tryEmit(true) diff --git a/libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt b/libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt index dffc1d1bbb..76bd7f743a 100644 --- a/libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt +++ b/libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt @@ -44,6 +44,4 @@ data class SessionData( val loginType: LoginType, /** The optional passphrase used to encrypt data in the SDK local store. */ val passphrase: String?, - /** Whether the session needs verification. */ - val needsVerification: Boolean, ) diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt index 6b79e867d0..3824def48c 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt @@ -34,7 +34,6 @@ internal fun SessionData.toDbModel(): DbSessionData { isTokenValid = if (isTokenValid) 1L else 0L, loginType = loginType.name, passphrase = passphrase, - needsVerification = if (needsVerification) 1L else 0L, ) } @@ -51,6 +50,5 @@ internal fun DbSessionData.toApiModel(): SessionData { isTokenValid = isTokenValid == 1L, loginType = LoginType.fromName(loginType ?: LoginType.UNKNOWN.name), passphrase = passphrase, - needsVerification = needsVerification == 1L, ) } diff --git a/libraries/session-storage/impl/src/main/sqldelight/databases/7.db b/libraries/session-storage/impl/src/main/sqldelight/databases/7.db new file mode 100644 index 0000000000000000000000000000000000000000..61805e1317fc2c710b044978b9edfce2c5e30ef4 GIT binary patch literal 12288 zcmeI#%TB^T6b9faUPD4)$Mz&_G*J^T>_x4HSZ`2_uE^L9FtN1QDFoIoOnfV!gx7HC zOdBE^4T($hPcnt!oHLiNY^HhR$V5;liu*jFeO6+Y#SV!WW0vkqy3d*!FV6=0(~K82 zi|veF3&nSqD@<8oT6|knfH(vo009U<00Izz00bZa0SNp_;JIzBl`9qNWhLPcfoKY) zWE7t8gwK7=9XITnYm-|$a%`Fl&_oi$77M)nA-e)}fxfk_?UV0?rRvi3PrvmBAu-lx3-gO*} zCuvSryS+`^_k~X~Bt3ySHSMMQ45F?KU8$!|cz;0kOV>WL8^2fWr&W>kJ;SzOiGws* zW=Fl{dVjM8KIKmA(^|`MX*XLl+s|Ym7EE1Dryg*n2ECZ8EIq$j&8?Q}6^qHx7i0Al z=-Ygo50fYzx947Fdv|VN?)B^DA5}1ql6jy(00Izz00bZa0SG_<0uX=z1R(HV1@h)# fxc~px*NbyO00Izz00bZa0SG_<0uX=z1X6(y0Z^;Q literal 0 HcmV?d00001 diff --git a/libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq b/libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq index 56b036ec96..c33b4d7c7e 100644 --- a/libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq +++ b/libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq @@ -23,9 +23,7 @@ CREATE TABLE SessionData ( isTokenValid INTEGER NOT NULL DEFAULT 1, loginType TEXT, -- added in version 5 - passphrase TEXT, - -- added in version 6 - needsVerification INTEGER NOT NULL DEFAULT 0 + passphrase TEXT ); diff --git a/libraries/session-storage/impl/src/main/sqldelight/migrations/6.sqm b/libraries/session-storage/impl/src/main/sqldelight/migrations/6.sqm new file mode 100644 index 0000000000..e4eccfdb8d --- /dev/null +++ b/libraries/session-storage/impl/src/main/sqldelight/migrations/6.sqm @@ -0,0 +1,20 @@ +-- Migrate DB from version 6 +-- Remove DB value for verified status, we're back to using the Rust SDK as a source of truth + +CREATE TABLE SessionData_bak ( + userId TEXT NOT NULL PRIMARY KEY, + deviceId TEXT NOT NULL, + accessToken TEXT NOT NULL, + refreshToken TEXT, + homeserverUrl TEXT NOT NULL, + slidingSyncProxy TEXT, + loginTimestamp INTEGER, + oidcData TEXT, + isTokenValid INTEGER NOT NULL DEFAULT 1, + loginType TEXT, + passphrase TEXT +); + +INSERT INTO SessionData_bak SELECT userId, deviceId, accessToken, refreshToken, homeserverUrl, slidingSyncProxy, loginTimestamp, oidcData, isTokenValid, loginType, passphrase FROM SessionData; +DROP TABLE SessionData; +ALTER TABLE SessionData_bak RENAME TO SessionData; diff --git a/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt b/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt index df35ec5944..46e90f6d52 100644 --- a/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt +++ b/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt @@ -144,7 +144,6 @@ class DatabaseSessionStoreTests { isTokenValid = 1, loginType = null, passphrase = "aPassphrase", - needsVerification = 1L, ) val secondSessionData = SessionData( userId = "userId", @@ -158,7 +157,6 @@ class DatabaseSessionStoreTests { isTokenValid = 1, loginType = null, passphrase = "aPassphraseAltered", - needsVerification = 0L, ) assertThat(firstSessionData.userId).isEqualTo(secondSessionData.userId) assertThat(firstSessionData.loginTimestamp).isNotEqualTo(secondSessionData.loginTimestamp) @@ -179,7 +177,6 @@ class DatabaseSessionStoreTests { assertThat(alteredSession.loginTimestamp).isEqualTo(firstSessionData.loginTimestamp) assertThat(alteredSession.oidcData).isEqualTo(secondSessionData.oidcData) assertThat(alteredSession.passphrase).isEqualTo(secondSessionData.passphrase) - assertThat(alteredSession.needsVerification).isEqualTo(secondSessionData.needsVerification) } @Test @@ -196,7 +193,6 @@ class DatabaseSessionStoreTests { isTokenValid = 1, loginType = null, passphrase = "aPassphrase", - needsVerification = 1L, ) val secondSessionData = SessionData( userId = "userIdUnknown", @@ -210,7 +206,6 @@ class DatabaseSessionStoreTests { isTokenValid = 1, loginType = null, passphrase = "aPassphraseAltered", - needsVerification = 0L, ) assertThat(firstSessionData.userId).isNotEqualTo(secondSessionData.userId) @@ -229,6 +224,5 @@ class DatabaseSessionStoreTests { assertThat(notAlteredSession.loginTimestamp).isEqualTo(firstSessionData.loginTimestamp) assertThat(notAlteredSession.oidcData).isEqualTo(firstSessionData.oidcData) assertThat(notAlteredSession.passphrase).isEqualTo(firstSessionData.passphrase) - assertThat(notAlteredSession.needsVerification).isEqualTo(firstSessionData.needsVerification) } } diff --git a/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/Fixtures.kt b/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/Fixtures.kt index 1397e260b9..341e5e0e92 100644 --- a/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/Fixtures.kt +++ b/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/Fixtures.kt @@ -31,5 +31,4 @@ internal fun aSessionData() = SessionData( isTokenValid = 1, loginType = LoginType.UNKNOWN.name, passphrase = null, - needsVerification = 0L, ) From fed1733cb577471d8ac970bb6cf6937006d88af7 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 24 Apr 2024 16:42:35 +0200 Subject: [PATCH 147/289] Timeline : makes sure to use the right timeline when making some action (edit, reply, reaction) --- .../features/messages/impl/MessagesNode.kt | 3 ++ .../messages/impl/MessagesPresenter.kt | 8 +++- .../MessageComposerPresenter.kt | 21 ++++++---- .../impl/timeline/TimelineController.kt | 26 ++++++++++-- .../features/poll/impl/data/PollRepository.kt | 21 ++++++---- .../libraries/matrix/api/room/MatrixRoom.kt | 1 + .../matrix/api/timeline/TimelineProvider.kt | 41 +++++++++++++++++++ 7 files changed, 99 insertions(+), 22 deletions(-) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 634aca1733..f3c3462cd8 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -35,6 +35,7 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.messages.impl.attachments.Attachment +import io.element.android.features.messages.impl.timeline.TimelineController import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.di.TimelineItemPresenterFactories @@ -71,6 +72,7 @@ class MessagesNode @AssistedInject constructor( private val permalinkParser: PermalinkParser, @ApplicationContext private val context: Context, + private val timelineController: TimelineController, ) : Node(buildContext, plugins = plugins), MessagesNavigator { private val presenter = presenterFactory.create(this) private val callback = plugins().firstOrNull() @@ -101,6 +103,7 @@ class MessagesNode @AssistedInject constructor( analyticsService.capture(room.toAnalyticsViewRoom()) }, onDestroy = { + timelineController.close() mediaPlayer.close() } ) 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 6531c0f8d5..db46bc0c86 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 @@ -38,6 +38,7 @@ import io.element.android.features.messages.impl.actionlist.model.TimelineItemAc import io.element.android.features.messages.impl.messagecomposer.MessageComposerEvents import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter import io.element.android.features.messages.impl.messagecomposer.MessageComposerState +import io.element.android.features.messages.impl.timeline.TimelineController import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.TimelinePresenter import io.element.android.features.messages.impl.timeline.TimelineState @@ -116,6 +117,7 @@ class MessagesPresenter @AssistedInject constructor( private val htmlConverterProvider: HtmlConverterProvider, @Assisted private val navigator: MessagesNavigator, private val buildMeta: BuildMeta, + private val timelineController: TimelineController, ) : Presenter { private val timelinePresenter = timelinePresenterFactory.create(navigator = navigator) @@ -286,8 +288,10 @@ class MessagesPresenter @AssistedInject constructor( emoji: String, eventId: EventId, ) = launch(dispatchers.io) { - room.toggleReaction(emoji, eventId) - .onFailure { Timber.e(it) } + timelineController.invokeOnTimeline { + toggleReaction(emoji, eventId) + .onFailure { Timber.e(it) } + } } private fun CoroutineScope.reinviteOtherUser(inviteProgress: MutableState>) = launch(dispatchers.io) { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt index 04c182a566..f7072922c7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt @@ -38,6 +38,7 @@ import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.attachments.preview.error.sendAttachmentError import io.element.android.features.messages.impl.mentions.MentionSuggestion import io.element.android.features.messages.impl.mentions.MentionSuggestionsProcessor +import io.element.android.features.messages.impl.timeline.TimelineController import io.element.android.features.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher @@ -100,6 +101,7 @@ class MessageComposerPresenter @Inject constructor( private val permalinkParser: PermalinkParser, private val permalinkBuilder: PermalinkBuilder, permissionsPresenterFactory: PermissionsPresenter.Factory, + private val timelineController: TimelineController, ) : Presenter { private val cameraPermissionPresenter = permissionsPresenterFactory.create(Manifest.permission.CAMERA) private var pendingEvent: MessageComposerEvents? = null @@ -264,7 +266,9 @@ class MessageComposerPresenter @Inject constructor( is MessageComposerMode.Quote -> null }.let { relatedEventId -> appCoroutineScope.launch { - room.enterSpecialMode(relatedEventId) + timelineController.invokeOnTimeline { + enterSpecialMode(relatedEventId) + } } } } @@ -386,16 +390,17 @@ class MessageComposerPresenter @Inject constructor( is MessageComposerMode.Edit -> { val eventId = capturedMode.eventId val transactionId = capturedMode.transactionId - room.editMessage(eventId, transactionId, message.markdown, message.html, mentions) + timelineController.invokeOnTimeline { + editMessage(eventId, transactionId, message.markdown, message.html, mentions) + } } is MessageComposerMode.Quote -> TODO() - is MessageComposerMode.Reply -> room.replyMessage( - capturedMode.eventId, - message.markdown, - message.html, - mentions - ) + is MessageComposerMode.Reply -> { + timelineController.invokeOnTimeline { + replyMessage(capturedMode.eventId, message.markdown, message.html, mentions) + } + } } analyticsService.capture( Composer( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index 9f98614fac..811ad18075 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -17,11 +17,14 @@ package io.element.android.features.messages.impl.timeline import androidx.compose.runtime.MutableState +import com.squareup.anvil.annotations.ContributesBinding import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider +import io.element.android.libraries.matrix.api.timeline.TimelineProvider import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.Timeline @@ -30,23 +33,25 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.flow.map +import java.io.Closeable import java.util.Optional import javax.inject.Inject import kotlin.coroutines.cancellation.CancellationException /** - * This controller is responsible of using the right timeline to display messages. + * This controller is responsible of using the right timeline to display messages and make associated actions. * It can be focused on the live timeline or on a detached timeline (focusing an unknown event). + * This controller will replace the [LiveTimelineProvider] in the DI. */ @SingleIn(RoomScope::class) +@ContributesBinding(RoomScope::class, boundType = TimelineProvider::class, replaces = [LiveTimelineProvider::class]) class TimelineController @Inject constructor( private val room: MatrixRoom, -) { +) : Closeable, TimelineProvider { private val liveTimeline = MutableStateFlow(room.liveTimeline) private val detachedTimeline = MutableStateFlow>(Optional.empty()) @@ -60,6 +65,12 @@ class TimelineController @Inject constructor( return detachedTimeline.map { !it.isPresent } } + suspend fun invokeOnTimeline(block: suspend (Timeline.() -> Any)) { + currentTimelineFlow().first().run { + block(this) + } + } + suspend fun focusOnEvent(eventId: EventId): Result { return try { val newDetachedTimeline = room.timelineFocusedOnEvent(eventId) @@ -93,6 +104,10 @@ class TimelineController @Inject constructor( } } + override fun close() { + focusOnLive() + } + suspend fun paginate(direction: Timeline.PaginationDirection): Result { return currentTimelineFlow().first().paginate(direction) .onSuccess { hasReachedEnd -> @@ -124,7 +139,6 @@ class TimelineController @Inject constructor( if (eventId != null && eventId != lastReadReceiptId.value) { lastReadReceiptId.value = eventId currentTimelineFlow() - .filterIsInstance(Timeline::class) .first() .sendReadReceipt(eventId = eventId, receiptType = readReceiptType) } @@ -140,4 +154,8 @@ class TimelineController @Inject constructor( } return null } + + override suspend fun getActiveTimeline(): Timeline { + return currentTimelineFlow().first() + } } diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt index 952fe97a5a..55d2bd8099 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt @@ -20,15 +20,18 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.TimelineProvider import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import kotlinx.coroutines.flow.first import javax.inject.Inject class PollRepository @Inject constructor( private val room: MatrixRoom, + private val timelineProvider: TimelineProvider, ) { suspend fun getPoll(eventId: EventId): Result = runCatching { - room.liveTimeline + timelineProvider + .getActiveTimeline() .timelineItems .first() .asSequence() @@ -51,13 +54,15 @@ class PollRepository @Inject constructor( maxSelections = maxSelections, pollKind = pollKind, ) - else -> room.editPoll( - pollStartId = existingPollId, - question = question, - answers = answers, - maxSelections = maxSelections, - pollKind = pollKind, - ) + else -> timelineProvider + .getActiveTimeline() + .editPoll( + pollStartId = existingPollId, + question = question, + answers = answers, + maxSelections = maxSelections, + pollKind = pollKind, + ) } suspend fun deletePoll( diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index a2ca077bb8..1e9b926aaf 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -32,6 +32,7 @@ import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange +import io.element.android.libraries.matrix.api.timeline.TimelineProvider import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt new file mode 100644 index 0000000000..242859fede --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.timeline + +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.matrix.api.room.MatrixRoom +import javax.inject.Inject + +/** + * This interface defines a way to get the active timeline. + * It could be the current room timeline, or a timeline for a specific event. + */ +interface TimelineProvider { + suspend fun getActiveTimeline(): Timeline +} + +/** + * Default implementation of [TimelineProvider] that provides the live timeline of a room. + */ +@ContributesBinding(RoomScope::class) +class LiveTimelineProvider @Inject constructor( + private val room: MatrixRoom, +) : TimelineProvider { + override suspend fun getActiveTimeline(): Timeline = room.liveTimeline +} + From bf87b975fc987e966659013f413638edd2e53831 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 24 Apr 2024 21:33:20 +0200 Subject: [PATCH 148/289] Timeline permalink : start updating tests --- .../messages/impl/MessagesPresenter.kt | 2 +- .../impl/forward/ForwardMessagesPresenter.kt | 5 +- .../MessageComposerPresenter.kt | 6 +- .../impl/timeline/TimelineController.kt | 37 +-- .../impl/timeline/TimelinePresenter.kt | 3 +- .../messages/impl/timeline/TimelineView.kt | 4 - .../factories/TimelineItemsFactory.kt | 4 - .../messages/impl/MessagesPresenterTest.kt | 6 + .../fixtures/TimelineItemsFactoryFixtures.kt | 6 +- .../forward/ForwardMessagesPresenterTests.kt | 3 +- .../MessageComposerPresenterTest.kt | 2 + .../impl/timeline/TimelinePresenterTest.kt | 287 ++++++++++-------- .../impl/timeline/TimelineViewTest.kt | 18 +- .../features/poll/impl/PollFixtures.kt | 6 +- .../impl/create/CreatePollPresenterTest.kt | 4 +- .../impl/history/PollHistoryPresenterTest.kt | 2 +- .../matrix/test/room/FakeMatrixRoom.kt | 9 +- .../test/timeline/FakeMatrixTimeline.kt | 96 ------ .../matrix/test/timeline/FakeTimeline.kt | 205 +++++++++++++ 19 files changed, 410 insertions(+), 295 deletions(-) delete mode 100644 libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeMatrixTimeline.kt create mode 100644 libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt 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 db46bc0c86..5825d5acfb 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 @@ -288,7 +288,7 @@ class MessagesPresenter @AssistedInject constructor( emoji: String, eventId: EventId, ) = launch(dispatchers.io) { - timelineController.invokeOnTimeline { + timelineController.invokeOnCurrentTimeline { toggleReaction(emoji, eventId) .onFailure { Timber.e(it) } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt index 367a071084..fd26109e0a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt @@ -30,6 +30,7 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.timeline.TimelineProvider import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope @@ -37,8 +38,8 @@ import kotlinx.coroutines.launch class ForwardMessagesPresenter @AssistedInject constructor( @Assisted eventId: String, - private val room: MatrixRoom, private val matrixCoroutineScope: CoroutineScope, + private val timelineProvider: TimelineProvider, ) : Presenter { private val eventId: EventId = EventId(eventId) @@ -79,7 +80,7 @@ class ForwardMessagesPresenter @AssistedInject constructor( isForwardMessagesState: MutableState>>, ) = launch { isForwardMessagesState.value = AsyncData.Loading() - room.forwardEvent(eventId, roomIds).fold( + timelineProvider.getActiveTimeline().forwardEvent(eventId, roomIds).fold( { isForwardMessagesState.value = AsyncData.Success(roomIds) }, { isForwardMessagesState.value = AsyncData.Failure(it) } ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt index f7072922c7..30bdadcbe5 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt @@ -266,7 +266,7 @@ class MessageComposerPresenter @Inject constructor( is MessageComposerMode.Quote -> null }.let { relatedEventId -> appCoroutineScope.launch { - timelineController.invokeOnTimeline { + timelineController.invokeOnCurrentTimeline { enterSpecialMode(relatedEventId) } } @@ -390,14 +390,14 @@ class MessageComposerPresenter @Inject constructor( is MessageComposerMode.Edit -> { val eventId = capturedMode.eventId val transactionId = capturedMode.transactionId - timelineController.invokeOnTimeline { + timelineController.invokeOnCurrentTimeline { editMessage(eventId, transactionId, message.markdown, message.html, mentions) } } is MessageComposerMode.Quote -> TODO() is MessageComposerMode.Reply -> { - timelineController.invokeOnTimeline { + timelineController.invokeOnCurrentTimeline { replyMessage(capturedMode.eventId, message.markdown, message.html, mentions) } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index 811ad18075..ce6bdfc7d3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -16,9 +16,7 @@ package io.element.android.features.messages.impl.timeline -import androidx.compose.runtime.MutableState import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.core.EventId @@ -26,9 +24,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.api.timeline.TimelineProvider import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.Timeline -import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -65,7 +61,7 @@ class TimelineController @Inject constructor( return detachedTimeline.map { !it.isPresent } } - suspend fun invokeOnTimeline(block: suspend (Timeline.() -> Any)) { + suspend fun invokeOnCurrentTimeline(block: suspend (Timeline.() -> Any)) { currentTimelineFlow().first().run { block(this) } @@ -124,37 +120,6 @@ class TimelineController @Inject constructor( } } - suspend fun sendReadReceiptIfNeeded( - firstVisibleIndex: Int, - timelineItems: ImmutableList, - lastReadReceiptId: MutableState, - readReceiptType: ReceiptType, - ) { - // If we are at the bottom of timeline, we mark the room as read. - if (firstVisibleIndex == 0) { - room.markAsRead(receiptType = readReceiptType) - } else { - // Get last valid EventId seen by the user, as the first index might refer to a Virtual item - val eventId = getLastEventIdBeforeOrAt(firstVisibleIndex, timelineItems) - if (eventId != null && eventId != lastReadReceiptId.value) { - lastReadReceiptId.value = eventId - currentTimelineFlow() - .first() - .sendReadReceipt(eventId = eventId, receiptType = readReceiptType) - } - } - } - - private fun getLastEventIdBeforeOrAt(index: Int, items: ImmutableList): EventId? { - for (i in index until items.count()) { - val item = items[i] - if (item is TimelineItem.Event) { - return item.eventId - } - } - return null - } - override suspend fun getActiveTimeline(): Timeline { return currentTimelineFlow().first() } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt index 570c614603..f3ba877888 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt @@ -111,6 +111,7 @@ class TimelinePresenter @AssistedInject constructor( if (event.firstIndex == 0) { newEventState.value = NewEventState.None } + println("## sendReadReceiptIfNeeded firstVisibleIndex: ${event.firstIndex}") appScope.sendReadReceiptIfNeeded( firstVisibleIndex = event.firstIndex, timelineItems = timelineItems, @@ -256,7 +257,7 @@ class TimelinePresenter @AssistedInject constructor( val eventId = getLastEventIdBeforeOrAt(firstVisibleIndex, timelineItems) if (eventId != null && eventId != lastReadReceiptId.value) { lastReadReceiptId.value = eventId - //timeline.sendReadReceipt(eventId = eventId, receiptType = readReceiptType) + room.liveTimeline.sendReadReceipt(eventId = eventId, receiptType = readReceiptType) } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 477314e20e..f15a0807cd 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -116,10 +116,6 @@ fun TimelineView( // TODO implement this logic once we have support to 'jump to event X' in sliding sync } - LaunchedEffect(key1 = state.timelineItems) { - Timber.d("TimelineView - timelineItem identifiers: ${state.timelineItems.joinToString(", ") { it.identifier() }}") - } - // Animate alpha when timeline is first displayed, to avoid flashes or glitching when viewing rooms AnimatedVisibility(visible = true, enter = fadeIn()) { Box(modifier) { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt index 34049fbaf7..ac9803506c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt @@ -62,10 +62,6 @@ class TimelineItemsFactory @Inject constructor( } } - fun items(): StateFlow> { - return timelineItems - } - @Composable fun collectItemsAsState(): State> { return timelineItems.collectAsState() diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 8df2c6d705..78dc7612a8 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -31,6 +31,8 @@ import io.element.android.features.messages.impl.messagecomposer.MessageComposer import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter import io.element.android.features.messages.impl.messagesummary.FakeMessageSummaryFormatter import io.element.android.features.messages.impl.textcomposer.TestRichTextEditorStateFactory +import io.element.android.features.messages.impl.timeline.TimelineController +import io.element.android.features.messages.impl.timeline.TimelineItemIndexer import io.element.android.features.messages.impl.timeline.TimelinePresenter import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionPresenter import io.element.android.features.messages.impl.timeline.components.customreaction.FakeEmojibaseProvider @@ -748,6 +750,7 @@ class MessagesPresenterTest { currentSessionIdHolder = CurrentSessionIdHolder(FakeMatrixClient(A_SESSION_ID)), permalinkParser = FakePermalinkParser(), permalinkBuilder = FakePermalinkBuilder(), + timelineController = TimelineController(matrixRoom), ) val voiceMessageComposerPresenter = VoiceMessageComposerPresenter( this, @@ -768,6 +771,8 @@ class MessagesPresenterTest { endPollAction = endPollAction, sendPollResponseAction = FakeSendPollResponseAction(), sessionPreferencesStore = sessionPreferencesStore, + timelineItemIndexer = TimelineItemIndexer(), + timelineController = TimelineController(matrixRoom), ) val timelinePresenterFactory = object : TimelinePresenter.Factory { override fun create(navigator: MessagesNavigator): TimelinePresenter { @@ -804,6 +809,7 @@ class MessagesPresenterTest { buildMeta = aBuildMeta(), dispatchers = coroutineDispatchers, htmlConverterProvider = FakeHtmlConverterProvider(), + timelineController = TimelineController(matrixRoom), ) } } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/TimelineItemsFactoryFixtures.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/TimelineItemsFactoryFixtures.kt index db056dea19..95dffe2bc0 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/TimelineItemsFactoryFixtures.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/TimelineItemsFactoryFixtures.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.fixtures +import io.element.android.features.messages.impl.timeline.TimelineItemIndexer import io.element.android.features.messages.impl.timeline.factories.TimelineItemsFactory import io.element.android.features.messages.impl.timeline.factories.event.TimelineItemContentFactory import io.element.android.features.messages.impl.timeline.factories.event.TimelineItemContentFailedToParseMessageFactory @@ -46,7 +47,9 @@ import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractorW import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.coroutines.test.TestScope -internal fun TestScope.aTimelineItemsFactory(): TimelineItemsFactory { +internal fun TestScope.aTimelineItemsFactory( + timelineItemIndexer: TimelineItemIndexer = TimelineItemIndexer() +): TimelineItemsFactory { val timelineEventFormatter = aTimelineEventFormatter() val matrixClient = FakeMatrixClient() return TimelineItemsFactory( @@ -83,6 +86,7 @@ internal fun TestScope.aTimelineItemsFactory(): TimelineItemsFactory { ), ), timelineItemGrouper = TimelineItemGrouper(), + timelineItemIndexer = timelineItemIndexer, ) } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt index c9acdba508..d1b054faf8 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt @@ -21,6 +21,7 @@ import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.aRoomSummaryDetails @@ -91,7 +92,7 @@ class ForwardMessagesPresenterTests { coroutineScope: CoroutineScope = this, ) = ForwardMessagesPresenter( eventId = eventId.value, - room = fakeMatrixRoom, + timelineProvider = LiveTimelineProvider(fakeMatrixRoom), matrixCoroutineScope = coroutineScope, ) } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt index 290f297117..b099562480 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt @@ -32,6 +32,7 @@ import io.element.android.features.messages.impl.messagecomposer.MessageComposer import io.element.android.features.messages.impl.messagecomposer.MessageComposerEvents import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter import io.element.android.features.messages.impl.messagecomposer.MessageComposerState +import io.element.android.features.messages.impl.timeline.TimelineController import io.element.android.features.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher @@ -968,6 +969,7 @@ class MessageComposerPresenterTest { permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionPresenter), permalinkParser = FakePermalinkParser(), permalinkBuilder = permalinkBuilder, + timelineController = TimelineController(room), ) private suspend fun ReceiveTurbine.awaitFirstItem(): T { diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt index 8d5699d4e0..3dd00021fe 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt @@ -35,9 +35,11 @@ import io.element.android.features.poll.test.actions.FakeEndPollAction import io.element.android.features.poll.test.actions.FakeSendPollResponseAction import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore +import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.ReceiptType +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction import io.element.android.libraries.matrix.api.timeline.item.event.ReactionSender import io.element.android.libraries.matrix.api.timeline.item.event.Receipt @@ -47,20 +49,28 @@ import io.element.android.libraries.matrix.test.AN_EVENT_ID_2 import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.aRoomMember -import io.element.android.libraries.matrix.test.timeline.FakeMatrixTimeline +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.matrix.test.timeline.aMessageContent import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem import io.element.android.libraries.matrix.ui.components.aMatrixUserList import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.awaitLastSequentialItem -import io.element.android.tests.testutils.awaitWithLatch import io.element.android.tests.testutils.consumeItemsUntilPredicate +import io.element.android.tests.testutils.lambda.any +import io.element.android.tests.testutils.lambda.assert +import io.element.android.tests.testutils.lambda.lambdaRecorder +import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.advanceTimeBy +import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Rule @@ -71,7 +81,7 @@ import kotlin.time.Duration.Companion.seconds private const val FAKE_UNIQUE_ID = "FAKE_UNIQUE_ID" private const val FAKE_UNIQUE_ID_2 = "FAKE_UNIQUE_ID_2" -class TimelinePresenterTest { +@OptIn(ExperimentalCoroutinesApi::class) class TimelinePresenterTest { @get:Rule val warmUpRule = WarmUpRule() @@ -83,58 +93,49 @@ class TimelinePresenterTest { }.test { val initialState = awaitFirstItem() assertThat(initialState.timelineItems).isEmpty() - val loadedNoTimelineState = awaitItem() - assertThat(loadedNoTimelineState.timelineItems).isEmpty() + assertThat(initialState.isLive).isTrue() + assertThat(initialState.newEventState).isEqualTo(NewEventState.None) + assertThat(initialState.focusedEventId).isNull() + assertThat(initialState.focusRequestState).isEqualTo(FocusRequestState.None) } } @Test fun `present - load more`() = runTest { - val presenter = createTimelinePresenter() + val paginateLambda = lambdaRecorder { _: Timeline.PaginationDirection -> + Result.success(false) + } + val timeline = FakeTimeline().apply { + this.paginateLambda = paginateLambda + } + val presenter = createTimelinePresenter(timeline = timeline) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { val initialState = awaitItem() - assertThat(initialState.backPaginationStatus.hasMoreToLoadBackwards).isTrue() - assertThat(initialState.backPaginationStatus.isBackPaginating).isFalse() - initialState.eventSink.invoke(TimelineEvents.LoadMore) - val inPaginationState = awaitItem() - assertThat(inPaginationState.backPaginationStatus.isBackPaginating).isTrue() - assertThat(inPaginationState.backPaginationStatus.hasMoreToLoadBackwards).isTrue() - val postPaginationState = awaitItem() - assertThat(postPaginationState.backPaginationStatus.hasMoreToLoadBackwards).isTrue() - assertThat(postPaginationState.backPaginationStatus.isBackPaginating).isFalse() - } - } - - @Test - fun `present - set highlighted event`() = runTest { - val presenter = createTimelinePresenter() - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { - val initialState = awaitFirstItem() - skipItems(1) - assertThat(initialState.highlightedEventId).isNull() - initialState.eventSink.invoke(TimelineEvents.SetHighlightedEvent(AN_EVENT_ID)) - val withHighlightedState = awaitItem() - assertThat(withHighlightedState.highlightedEventId).isEqualTo(AN_EVENT_ID) - initialState.eventSink.invoke(TimelineEvents.SetHighlightedEvent(null)) - val withoutHighlightedState = awaitItem() - assertThat(withoutHighlightedState.highlightedEventId).isNull() + initialState.eventSink.invoke(TimelineEvents.LoadMore(Timeline.PaginationDirection.BACKWARDS)) + initialState.eventSink.invoke(TimelineEvents.LoadMore(Timeline.PaginationDirection.FORWARDS)) + assert(paginateLambda) + .isCalledExactly(2) + .withSequence( + listOf(value(Timeline.PaginationDirection.BACKWARDS)), + listOf(value(Timeline.PaginationDirection.FORWARDS)) + ) } } @OptIn(ExperimentalCoroutinesApi::class) @Test fun `present - on scroll finished mark a room as read if the first visible index is 0`() = runTest(StandardTestDispatcher()) { - val timeline = FakeMatrixTimeline( - initialTimelineItems = listOf( - MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem()) + val timeline = FakeTimeline( + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem()) + ) ) ) + val room = FakeMatrixRoom(liveTimeline = timeline) val sessionPreferencesStore = InMemorySessionPreferencesStore(isSendPublicReadReceiptsEnabled = false) - val room = FakeMatrixRoom(matrixTimeline = timeline) val presenter = createTimelinePresenter( timeline = timeline, room = room, @@ -143,7 +144,6 @@ class TimelinePresenterTest { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - assertThat(timeline.sentReadReceipts).isEmpty() val initialState = awaitFirstItem() initialState.eventSink.invoke(TimelineEvents.OnScrollFinished(0)) runCurrent() @@ -154,48 +154,62 @@ class TimelinePresenterTest { @Test fun `present - on scroll finished send read receipt if an event is before the index`() = runTest { - val timeline = FakeMatrixTimeline( - initialTimelineItems = listOf( - MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem()), - MatrixTimelineItem.Event( - uniqueId = FAKE_UNIQUE_ID_2, - event = anEventTimelineItem( - eventId = AN_EVENT_ID_2, - content = aMessageContent("Test message") + val sendReadReceiptsLambda = lambdaRecorder { _: EventId, _: ReceiptType -> + Result.success(Unit) + } + val timeline = FakeTimeline( + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem()), + MatrixTimelineItem.Event( + uniqueId = FAKE_UNIQUE_ID_2, + event = anEventTimelineItem( + eventId = AN_EVENT_ID_2, + content = aMessageContent("Test message") + ) ) ) ) - ) + ).apply { + this.sendReadReceiptLambda = sendReadReceiptsLambda + } val presenter = createTimelinePresenter(timeline) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - assertThat(timeline.sentReadReceipts).isEmpty() - val initialState = awaitFirstItem() - awaitWithLatch { latch -> - timeline.sendReadReceiptLatch = latch - initialState.eventSink.invoke(TimelineEvents.OnScrollFinished(1)) + skipItems(1) + awaitItem().run { + eventSink.invoke(TimelineEvents.OnScrollFinished(1)) } - assertThat(timeline.sentReadReceipts).isNotEmpty() - assertThat(timeline.sentReadReceipts.first().second).isEqualTo(ReceiptType.READ) + advanceUntilIdle() + assert(sendReadReceiptsLambda) + .isCalledOnce() + .with(any(), value(ReceiptType.READ)) cancelAndIgnoreRemainingEvents() } } @Test fun `present - on scroll finished send a private read receipt if an event is at an index other than 0 and public read receipts are disabled`() = runTest { - val timeline = FakeMatrixTimeline( - initialTimelineItems = listOf( - MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem()), - MatrixTimelineItem.Event( - uniqueId = FAKE_UNIQUE_ID_2, - event = anEventTimelineItem( - eventId = AN_EVENT_ID_2, - content = aMessageContent("Test message") + val sendReadReceiptsLambda = lambdaRecorder { _: EventId, _: ReceiptType -> + Result.success(Unit) + } + val timeline = FakeTimeline( + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem()), + MatrixTimelineItem.Event( + uniqueId = FAKE_UNIQUE_ID_2, + event = anEventTimelineItem( + eventId = AN_EVENT_ID_2, + content = aMessageContent("Test message") + ) ) ) ) - ) + ).apply { + this.sendReadReceiptLambda = sendReadReceiptsLambda + } val sessionPreferencesStore = InMemorySessionPreferencesStore(isSendPublicReadReceiptsEnabled = false) val presenter = createTimelinePresenter( timeline = timeline, @@ -204,75 +218,86 @@ class TimelinePresenterTest { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - assertThat(timeline.sentReadReceipts).isEmpty() - val initialState = awaitFirstItem() - awaitWithLatch { latch -> - timeline.sendReadReceiptLatch = latch - initialState.eventSink.invoke(TimelineEvents.OnScrollFinished(0)) - initialState.eventSink.invoke(TimelineEvents.OnScrollFinished(1)) + skipItems(1) + awaitItem().run { + eventSink.invoke(TimelineEvents.OnScrollFinished(0)) + eventSink.invoke(TimelineEvents.OnScrollFinished(1)) } - assertThat(timeline.sentReadReceipts).isNotEmpty() - assertThat(timeline.sentReadReceipts.first().second).isEqualTo(ReceiptType.READ_PRIVATE) + advanceUntilIdle() + assert(sendReadReceiptsLambda) + .isCalledOnce() + .with(any(), value(ReceiptType.READ_PRIVATE)) cancelAndIgnoreRemainingEvents() } } @Test fun `present - on scroll finished will not send read receipt the first visible event is the same as before`() = runTest { - val timeline = FakeMatrixTimeline( - initialTimelineItems = listOf( - MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem()), - MatrixTimelineItem.Event( - uniqueId = FAKE_UNIQUE_ID_2, - event = anEventTimelineItem( - eventId = AN_EVENT_ID_2, - content = aMessageContent("Test message") + val sendReadReceiptsLambda = lambdaRecorder { _: EventId, _: ReceiptType -> + Result.success(Unit) + } + val timeline = FakeTimeline( + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem()), + MatrixTimelineItem.Event( + uniqueId = FAKE_UNIQUE_ID_2, + event = anEventTimelineItem( + eventId = AN_EVENT_ID_2, + content = aMessageContent("Test message") + ) ) ) ) - ) + ).apply { + this.sendReadReceiptLambda = sendReadReceiptsLambda + } val presenter = createTimelinePresenter(timeline) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - assertThat(timeline.sentReadReceipts).isEmpty() - val initialState = awaitFirstItem() - awaitWithLatch { latch -> - timeline.sendReadReceiptLatch = latch - initialState.eventSink.invoke(TimelineEvents.OnScrollFinished(1)) - initialState.eventSink.invoke(TimelineEvents.OnScrollFinished(1)) + skipItems(1) + awaitItem().run { + eventSink.invoke(TimelineEvents.OnScrollFinished(1)) + eventSink.invoke(TimelineEvents.OnScrollFinished(1)) } - assertThat(timeline.sentReadReceipts).hasSize(1) + advanceUntilIdle() cancelAndIgnoreRemainingEvents() + assert(sendReadReceiptsLambda).isCalledOnce() } } @Test fun `present - on scroll finished will not send read receipt only virtual events exist before the index`() = runTest { - val timeline = FakeMatrixTimeline( - initialTimelineItems = listOf( - MatrixTimelineItem.Virtual(FAKE_UNIQUE_ID, VirtualTimelineItem.ReadMarker), - MatrixTimelineItem.Virtual(FAKE_UNIQUE_ID, VirtualTimelineItem.ReadMarker) + val sendReadReceiptsLambda = lambdaRecorder { _: EventId, _: ReceiptType -> + Result.success(Unit) + } + val timeline = FakeTimeline( + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Virtual(FAKE_UNIQUE_ID, VirtualTimelineItem.ReadMarker), + MatrixTimelineItem.Virtual(FAKE_UNIQUE_ID, VirtualTimelineItem.ReadMarker) + ) ) - ) + ).apply { + this.sendReadReceiptLambda = sendReadReceiptsLambda + } val presenter = createTimelinePresenter(timeline) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - assertThat(timeline.sentReadReceipts).isEmpty() + skipItems(1) val initialState = awaitFirstItem() - awaitWithLatch { latch -> - timeline.sendReadReceiptLatch = latch - initialState.eventSink.invoke(TimelineEvents.OnScrollFinished(1)) - } - assertThat(timeline.sentReadReceipts).isEmpty() + initialState.eventSink.invoke(TimelineEvents.OnScrollFinished(1)) cancelAndIgnoreRemainingEvents() + assert(sendReadReceiptsLambda).isNeverCalled() } } @Test fun `present - covers newEventState scenarios`() = runTest { - val timeline = FakeMatrixTimeline() + val timelineItems = MutableStateFlow(emptyList()) + val timeline = FakeTimeline(timelineItems = timelineItems) val presenter = createTimelinePresenter(timeline) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -280,12 +305,12 @@ class TimelinePresenterTest { val initialState = awaitFirstItem() assertThat(initialState.newEventState).isEqualTo(NewEventState.None) assertThat(initialState.timelineItems.size).isEqualTo(0) - timeline.updateTimelineItems { + timelineItems.emit( listOf(MatrixTimelineItem.Event("0", anEventTimelineItem(content = aMessageContent()))) - } + ) consumeItemsUntilPredicate { it.timelineItems.size == 1 } // Mimics sending a message, and assert newEventState is FromMe - timeline.updateTimelineItems { items -> + timelineItems.getAndUpdate { items -> val event = anEventTimelineItem(content = aMessageContent(), isOwn = true) items + listOf(MatrixTimelineItem.Event("1", event)) } @@ -294,7 +319,7 @@ class TimelinePresenterTest { assertThat(state.newEventState).isEqualTo(NewEventState.FromMe) } // Mimics receiving a message without clearing the previous FromMe - timeline.updateTimelineItems { items -> + timelineItems.getAndUpdate { items -> val event = anEventTimelineItem(content = aMessageContent()) items + listOf(MatrixTimelineItem.Event("2", event)) } @@ -306,7 +331,7 @@ class TimelinePresenterTest { assertThat(state.newEventState).isEqualTo(NewEventState.None) } // Mimics receiving a message and assert newEventState is FromOther - timeline.updateTimelineItems { items -> + timelineItems.getAndUpdate { items -> val event = anEventTimelineItem(content = aMessageContent()) items + listOf(MatrixTimelineItem.Event("3", event)) } @@ -320,7 +345,10 @@ class TimelinePresenterTest { @Test fun `present - reaction ordering`() = runTest { - val timeline = FakeMatrixTimeline() + val timelineItems = MutableStateFlow(emptyList()) + val timeline = FakeTimeline( + timelineItems = timelineItems, + ) val presenter = createTimelinePresenter(timeline) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -348,10 +376,9 @@ class TimelinePresenterTest { senders = persistentListOf(charlie) ), ) - timeline.updateTimelineItems { + timelineItems.emit( listOf(MatrixTimelineItem.Event(FAKE_UNIQUE_ID, anEventTimelineItem(reactions = oneReaction))) - } - skipItems(1) + ) val item = awaitItem().timelineItems.first() assertThat(item).isInstanceOf(TimelineItem.Event::class.java) val event = item as TimelineItem.Event @@ -423,8 +450,10 @@ class TimelinePresenterTest { fun `present - side effect on redacted items is invoked`() = runTest { val redactedVoiceMessageManager = FakeRedactedVoiceMessageManager() val presenter = createTimelinePresenter( - timeline = FakeMatrixTimeline( - initialTimelineItems = aRedactedMatrixTimeline(AN_EVENT_ID), + timeline = FakeTimeline( + timelineItems = flowOf( + aRedactedMatrixTimeline(AN_EVENT_ID), + ) ), redactedVoiceMessageManager = redactedVoiceMessageManager, ) @@ -432,32 +461,32 @@ class TimelinePresenterTest { presenter.present() }.test { assertThat(redactedVoiceMessageManager.invocations.size).isEqualTo(0) - awaitFirstItem().let { - assertThat(it.timelineItems).isNotEmpty() - } + skipItems(2) assertThat(redactedVoiceMessageManager.invocations.size).isEqualTo(1) } } @Test fun `present - when room member info is loaded, read receipts info should be updated`() = runTest { - val timeline = FakeMatrixTimeline( - listOf( - MatrixTimelineItem.Event( - FAKE_UNIQUE_ID, - anEventTimelineItem( - sender = A_USER_ID, - receipts = persistentListOf( - Receipt( - userId = A_USER_ID, - timestamp = 0L, + val timeline = FakeTimeline( + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Event( + FAKE_UNIQUE_ID, + anEventTimelineItem( + sender = A_USER_ID, + receipts = persistentListOf( + Receipt( + userId = A_USER_ID, + timestamp = 0L, + ) ) ) ) ) ) ) - val room = FakeMatrixRoom(matrixTimeline = timeline).apply { + val room = FakeMatrixRoom(liveTimeline = timeline).apply { givenRoomMembersState(MatrixRoomMembersState.Unknown) } @@ -484,16 +513,12 @@ class TimelinePresenterTest { } private suspend fun ReceiveTurbine.awaitFirstItem(): T { - // Skip 1 item if Mentions feature is enabled - if (FeatureFlags.Mentions.defaultValue) { - skipItems(1) - } return awaitItem() } private fun TestScope.createTimelinePresenter( - timeline: MatrixTimeline = FakeMatrixTimeline(), - room: FakeMatrixRoom = FakeMatrixRoom(matrixTimeline = timeline), + timeline: Timeline = FakeTimeline(), + room: FakeMatrixRoom = FakeMatrixRoom(liveTimeline = timeline), timelineItemsFactory: TimelineItemsFactory = aTimelineItemsFactory(), redactedVoiceMessageManager: RedactedVoiceMessageManager = FakeRedactedVoiceMessageManager(), messagesNavigator: FakeMessagesNavigator = FakeMessagesNavigator(), @@ -511,6 +536,8 @@ class TimelinePresenterTest { endPollAction = endPollAction, sendPollResponseAction = sendPollResponseAction, sessionPreferencesStore = sessionPreferencesStore, + timelineItemIndexer = TimelineItemIndexer(), + timelineController = TimelineController(room), ) } } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt index be7df31635..0f99e8b558 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt @@ -19,10 +19,14 @@ package io.element.android.features.messages.impl.timeline import androidx.activity.ComponentActivity import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.messages.impl.timeline.model.TimelineItem +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.typing.aTypingNotificationState +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.tests.testutils.EnsureNeverCalledWithParam import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams import io.element.android.tests.testutils.EventsRecorder +import kotlinx.collections.immutable.persistentListOf import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -37,10 +41,13 @@ class TimelineViewTest { rule.setContent { TimelineView( aTimelineState( + timelineItems = persistentListOf( + TimelineItem.Virtual( + id = "backward_pagination", + model = TimelineItemLoadingIndicatorModel(Timeline.PaginationDirection.BACKWARDS, 0) + ), + ), eventSink = eventsRecorder, - paginationState = aPaginationState( - hasMoreToLoadBackwards = true, - ) ), typingNotificationState = aTypingNotificationState(), onUserDataClicked = EnsureNeverCalledWithParam(), @@ -55,7 +62,7 @@ class TimelineViewTest { onReadReceiptClick = EnsureNeverCalledWithParam(), ) } - eventsRecorder.assertSingle(TimelineEvents.LoadMore) + eventsRecorder.assertSingle(TimelineEvents.LoadMore(Timeline.PaginationDirection.BACKWARDS)) } @Test @@ -65,9 +72,6 @@ class TimelineViewTest { TimelineView( aTimelineState( eventSink = eventsRecorder, - paginationState = aPaginationState( - hasMoreToLoadBackwards = false, - ) ), typingNotificationState = aTypingNotificationState(), onUserDataClicked = EnsureNeverCalledWithParam(), diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt index b54b18b8c0..84ef0aae31 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt @@ -20,15 +20,15 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.poll.PollAnswer import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent -import io.element.android.libraries.matrix.test.timeline.FakeMatrixTimeline +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.matrix.test.timeline.aPollContent import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem import kotlinx.collections.immutable.persistentListOf fun aPollTimeline( polls: Map = emptyMap(), -): FakeMatrixTimeline { - return FakeMatrixTimeline( +): FakeTimeline { + return FakeTimeline( initialTimelineItems = polls.map { entry -> MatrixTimelineItem.Event( entry.key.value, diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt index d5be6c2bb6..445187168e 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt @@ -49,7 +49,7 @@ class CreatePollPresenterTest { private var navUpInvocationsCount = 0 private val existingPoll = anOngoingPollContent() private val fakeMatrixRoom = FakeMatrixRoom( - matrixTimeline = aPollTimeline( + liveTimeline = aPollTimeline( mapOf(pollEventId to existingPoll) ) ) @@ -80,7 +80,7 @@ class CreatePollPresenterTest { @Test fun `in edit mode, if poll doesn't exist, error is tracked and screen is closed`() = runTest { val room = FakeMatrixRoom( - matrixTimeline = aPollTimeline() + liveTimeline = aPollTimeline() ) val presenter = createCreatePollPresenter(mode = CreatePollMode.EditPoll(AN_EVENT_ID), room = room) moleculeFlow(RecompositionMode.Immediate) { diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt index f7948a951c..c34c9074f0 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt @@ -57,7 +57,7 @@ class PollHistoryPresenterTest { ) ) private val room = FakeMatrixRoom( - matrixTimeline = timeline + liveTimeline = timeline ) @Test diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index 96bcd3330d..17f9358df7 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -44,6 +44,7 @@ import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange import io.element.android.libraries.matrix.api.timeline.ReceiptType +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings @@ -53,7 +54,7 @@ import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.A_SESSION_ID import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler import io.element.android.libraries.matrix.test.notificationsettings.FakeNotificationSettingsService -import io.element.android.libraries.matrix.test.timeline.FakeMatrixTimeline +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.matrix.test.widget.FakeWidgetDriver import io.element.android.tests.testutils.simulateLongTask import kotlinx.collections.immutable.ImmutableMap @@ -83,7 +84,7 @@ class FakeMatrixRoom( override val joinedMemberCount: Long = 123L, override val activeMemberCount: Long = 234L, val notificationSettingsService: NotificationSettingsService = FakeNotificationSettingsService(), - private val matrixTimeline: MatrixTimeline = FakeMatrixTimeline(), + override val liveTimeline: Timeline = FakeTimeline(), private var roomPermalinkResult: () -> Result = { Result.success("room link") }, private var eventPermalinkResult: (EventId) -> Result = { Result.success("event link") }, canRedactOwn: Boolean = false, @@ -214,7 +215,9 @@ class FakeMatrixRoom( override val syncUpdateFlow: StateFlow = MutableStateFlow(0L) - override val timeline: MatrixTimeline = matrixTimeline + override suspend fun timelineFocusedOnEvent(eventId: EventId): Timeline { + return FakeTimeline() + } override suspend fun subscribeToSync() = Unit diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeMatrixTimeline.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeMatrixTimeline.kt deleted file mode 100644 index f98e8d0fcb..0000000000 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeMatrixTimeline.kt +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.test.timeline - -import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.ReceiptType -import io.element.android.tests.testutils.simulateLongTask -import kotlinx.coroutines.CompletableDeferred -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.getAndUpdate - -class FakeMatrixTimeline( - initialTimelineItems: List = emptyList(), - initialPaginationState: MatrixTimeline.PaginationState = MatrixTimeline.PaginationState( - hasMoreToLoadBackwards = true, - isBackPaginating = false, - beginningOfRoomReached = false, - ) -) : MatrixTimeline { - private val _paginationState: MutableStateFlow = MutableStateFlow(initialPaginationState) - private val _timelineItems: MutableStateFlow> = MutableStateFlow(initialTimelineItems) - - var sentReadReceipts = mutableListOf>() - private set - - var sendReadReceiptLatch: CompletableDeferred? = null - - fun updatePaginationState(update: (MatrixTimeline.PaginationState.() -> MatrixTimeline.PaginationState)) { - _paginationState.getAndUpdate(update) - } - - fun updateTimelineItems(update: (items: List) -> List) { - _timelineItems.getAndUpdate(update) - } - - override val paginationState: StateFlow = _paginationState - - override val timelineItems: Flow> = _timelineItems - - override suspend fun paginateBackwards(requestSize: Int) = paginateBackwards() - override suspend fun paginateBackwards(requestSize: Int, untilNumberOfItems: Int) = paginateBackwards() - - override val membershipChangeEventReceived = MutableSharedFlow() - - private suspend fun paginateBackwards(): Result { - updatePaginationState { - copy(isBackPaginating = true) - } - delay(100) - updatePaginationState { - copy(isBackPaginating = false) - } - updateTimelineItems { timelineItems -> - timelineItems - } - return Result.success(Unit) - } - - fun givenMembershipChangeEventReceived() { - membershipChangeEventReceived.tryEmit(Unit) - } - - override suspend fun fetchDetailsForEvent(eventId: EventId): Result = simulateLongTask { - Result.success(Unit) - } - - override suspend fun sendReadReceipt( - eventId: EventId, - receiptType: ReceiptType, - ): Result = simulateLongTask { - sentReadReceipts.add(eventId to receiptType) - sendReadReceiptLatch?.complete(Unit) - Result.success(Unit) - } - - override fun close() = Unit -} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt new file mode 100644 index 0000000000..5663ad6b5b --- /dev/null +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.test.timeline + +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.ProgressCallback +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.TransactionId +import io.element.android.libraries.matrix.api.media.AudioInfo +import io.element.android.libraries.matrix.api.media.FileInfo +import io.element.android.libraries.matrix.api.media.ImageInfo +import io.element.android.libraries.matrix.api.media.MediaUploadHandler +import io.element.android.libraries.matrix.api.media.VideoInfo +import io.element.android.libraries.matrix.api.poll.PollKind +import io.element.android.libraries.matrix.api.room.Mention +import io.element.android.libraries.matrix.api.room.location.AssetType +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.ReceiptType +import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler +import io.element.android.tests.testutils.simulateLongTask +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import java.io.File + +class FakeTimeline( + override val timelineItems: Flow> = MutableStateFlow(emptyList()), + private val backwardPaginationStatus: MutableStateFlow = MutableStateFlow( + Timeline.PaginationStatus( + isPaginating = false, + hasMoreToLoad = true + ) + ), + private val forwardPaginationStatus: MutableStateFlow = MutableStateFlow( + Timeline.PaginationStatus( + isPaginating = false, + hasMoreToLoad = false + ) + ), + override val membershipChangeEventReceived: Flow = MutableSharedFlow(), +) : Timeline { + + var sendMessageLambda: (body: String, htmlBody: String?, mentions: List) -> Result = { _, _, _ -> Result.success(Unit) } + override suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result = sendMessageLambda(body, htmlBody, mentions) + + var editMessageLambda: (originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List) -> Result = + { _, _, _, _, _ -> Result.success(Unit) } + + override suspend fun editMessage(originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List): Result = editMessageLambda( + originalEventId, + transactionId, + body, + htmlBody, + mentions + ) + + var enterSpecialModeLambda: (eventId: EventId?) -> Result = { Result.success(Unit) } + override suspend fun enterSpecialMode(eventId: EventId?): Result = enterSpecialModeLambda(eventId) + + var replyMessageLambda: (eventId: EventId, body: String, htmlBody: String?, mentions: List) -> Result = + { _, _, _, _ -> Result.success(Unit) } + + override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result = replyMessageLambda( + eventId, + body, + htmlBody, + mentions + ) + + var sendImageLambda: (file: File, thumbnailFile: File?, imageInfo: ImageInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?) -> Result = + { _, _, _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } + + override suspend fun sendImage(file: File, thumbnailFile: File?, imageInfo: ImageInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?): Result = sendImageLambda( + file, + thumbnailFile, + imageInfo, + body, + formattedBody, + progressCallback + ) + + var sendVideoLambda: (file: File, thumbnailFile: File?, videoInfo: VideoInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?) -> Result = + { _, _, _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } + + override suspend fun sendVideo(file: File, thumbnailFile: File?, videoInfo: VideoInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?): Result = sendVideoLambda( + file, + thumbnailFile, + videoInfo, + body, + formattedBody, + progressCallback + ) + + var sendAudioLambda: (file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?) -> Result = + { _, _, _ -> Result.success(FakeMediaUploadHandler()) } + + override suspend fun sendAudio(file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?): Result = sendAudioLambda( + file, + audioInfo, + progressCallback + ) + + var sendFileLambda: (file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?) -> Result = + { _, _, _ -> Result.success(FakeMediaUploadHandler()) } + + override suspend fun sendFile(file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?): Result = sendFileLambda( + file, + fileInfo, + progressCallback + ) + + var toggleReactionLambda: (emoji: String, eventId: EventId) -> Result = { _, _ -> Result.success(Unit) } + override suspend fun toggleReaction(emoji: String, eventId: EventId): Result = toggleReactionLambda(emoji, eventId) + + var forwardEventLambda: (eventId: EventId, roomIds: List) -> Result = { _, _ -> Result.success(Unit) } + override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result = forwardEventLambda(eventId, roomIds) + + var retrySendMessageLambda: (transactionId: TransactionId) -> Result = { Result.success(Unit) } + override suspend fun retrySendMessage(transactionId: TransactionId): Result = retrySendMessageLambda(transactionId) + + var cancelSendLambda: (transactionId: TransactionId) -> Result = { Result.success(Unit) } + override suspend fun cancelSend(transactionId: TransactionId): Result = cancelSendLambda(transactionId) + + var sendLocationLambda: (body: String, geoUri: String, description: String?, zoomLevel: Int?, assetType: AssetType?) -> Result = + { _, _, _, _, _ -> Result.success(Unit) } + + override suspend fun sendLocation(body: String, geoUri: String, description: String?, zoomLevel: Int?, assetType: AssetType?): Result = sendLocationLambda( + body, + geoUri, + description, + zoomLevel, + assetType + ) + + var createPollLambda: (question: String, answers: List, maxSelections: Int, pollKind: PollKind) -> Result = + { _, _, _, _ -> Result.success(Unit) } + + override suspend fun createPoll(question: String, answers: List, maxSelections: Int, pollKind: PollKind): Result = createPollLambda( + question, + answers, + maxSelections, + pollKind + ) + + var editPollLambda: (pollStartId: EventId, question: String, answers: List, maxSelections: Int, pollKind: PollKind) -> Result = + { _, _, _, _, _ -> Result.success(Unit) } + + override suspend fun editPoll(pollStartId: EventId, question: String, answers: List, maxSelections: Int, pollKind: PollKind): Result = editPollLambda( + pollStartId, + question, + answers, + maxSelections, + pollKind + ) + + var sendPollResponseLambda: (pollStartId: EventId, answers: List) -> Result = { _, _ -> Result.success(Unit) } + override suspend fun sendPollResponse(pollStartId: EventId, answers: List): Result = sendPollResponseLambda(pollStartId, answers) + + var endPollLambda: (pollStartId: EventId, text: String) -> Result = { _, _ -> Result.success(Unit) } + override suspend fun endPoll(pollStartId: EventId, text: String): Result = endPollLambda(pollStartId, text) + + var sendVoiceMessageLambda: (file: File, audioInfo: AudioInfo, waveform: List, progressCallback: ProgressCallback?) -> Result = + { _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } + + override suspend fun sendVoiceMessage(file: File, audioInfo: AudioInfo, waveform: List, progressCallback: ProgressCallback?): Result = sendVoiceMessageLambda( + file, + audioInfo, + waveform, + progressCallback + ) + + var sendReadReceiptLambda: (eventId: EventId, receiptType: ReceiptType) -> Result = { _, _ -> Result.success(Unit) } + override suspend fun sendReadReceipt( + eventId: EventId, + receiptType: ReceiptType, + ): Result = sendReadReceiptLambda(eventId, receiptType) + + var paginateLambda: (direction: Timeline.PaginationDirection) -> Result = { Result.success(false) } + override suspend fun paginate(direction: Timeline.PaginationDirection): Result = paginateLambda(direction) + + override fun paginationStatus(direction: Timeline.PaginationDirection): StateFlow { + return when (direction) { + Timeline.PaginationDirection.BACKWARDS -> backwardPaginationStatus + Timeline.PaginationDirection.FORWARDS -> forwardPaginationStatus + } + } + + override fun close() = Unit +} From 0140c8982e46c8300dcd3a9f36b491d50e87c258 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 15:18:50 +0200 Subject: [PATCH 149/289] i18n --- .../io/element/android/features/joinroom/impl/JoinRoomView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 89e7457fee..6649987c58 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -250,7 +250,7 @@ private fun JoinRoomContent( }, subtitle = { Text( - text = "Failed to get information about the room", + text = stringResource(id = CommonStrings.error_unknown), textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.error, ) From d4b7f01a0667dde0ea7634b165299175e0f07c24 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 16:22:21 +0200 Subject: [PATCH 150/289] Introduce RoomType --- .../joinroom/impl/JoinRoomPresenter.kt | 4 +++ .../features/joinroom/impl/JoinRoomState.kt | 2 ++ .../joinroom/impl/JoinRoomStateProvider.kt | 3 +++ .../joinroom/impl/JoinRoomPresenterTest.kt | 4 ++- .../libraries/matrix/api/room/RoomType.kt | 23 ++++++++++++++++ .../matrix/api/room/preview/RoomPreview.kt | 3 ++- .../libraries/matrix/impl/room/RoomType.kt | 27 +++++++++++++++++++ .../impl/room/preview/RoomPreviewMapper.kt | 3 ++- 8 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomType.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomType.kt diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index ce3f0274d6..27adffbcb6 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -43,6 +43,7 @@ import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo +import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.ui.model.toInviteSender import kotlinx.coroutines.CoroutineScope @@ -153,6 +154,7 @@ private fun RoomPreview.toContentState(): ContentState { alias = canonicalAlias, numberOfMembers = numberOfJoinedMembers, isDirect = false, + roomType = roomType, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when { // Note when isInvited, roomInfo will be used, so if this happen, it will be temporary. @@ -173,6 +175,7 @@ internal fun RoomDescription.toContentState(): ContentState { alias = alias, numberOfMembers = numberOfMembers, isDirect = false, + roomType = RoomType.Room, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when (joinRule) { RoomDescription.JoinRule.KNOCK -> JoinAuthorisationStatus.CanKnock @@ -191,6 +194,7 @@ internal fun MatrixRoomInfo.toContentState(): ContentState { alias = canonicalAlias, numberOfMembers = activeMembersCount, isDirect = isDirect, + roomType = if (isSpace) RoomType.Space else RoomType.Room, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when { currentUserMembership == CurrentUserMembership.INVITED -> JoinAuthorisationStatus.IsInvited( diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index b32a63cc59..1b78e10905 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -24,6 +24,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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.core.RoomIdOrAlias +import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.ui.model.InviteSender @Immutable @@ -50,6 +51,7 @@ sealed interface ContentState { val alias: RoomAlias?, val numberOfMembers: Long?, val isDirect: Boolean, + val roomType: RoomType, val roomAvatarUrl: String?, val joinAuthorisationStatus: JoinAuthorisationStatus, ) : ContentState { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index e6f50a3676..7c4cb2ea7d 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -27,6 +27,7 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias +import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.ui.model.InviteSender open class JoinRoomStateProvider : PreviewParameterProvider { @@ -90,6 +91,7 @@ fun aLoadedContentState( topic: String? = "Element X is a secure, private and decentralized messenger.", numberOfMembers: Long? = null, isDirect: Boolean = false, + roomType: RoomType = RoomType.Room, roomAvatarUrl: String? = null, joinAuthorisationStatus: JoinAuthorisationStatus = JoinAuthorisationStatus.Unknown ) = ContentState.Loaded( @@ -99,6 +101,7 @@ fun aLoadedContentState( topic = topic, numberOfMembers = numberOfMembers, isDirect = isDirect, + roomType = roomType, roomAvatarUrl = roomAvatarUrl, joinAuthorisationStatus = joinAuthorisationStatus ) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 2934f09211..165a63be77 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -30,6 +30,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.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership +import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.test.AN_EXCEPTION import io.element.android.libraries.matrix.test.A_ROOM_ID @@ -315,7 +316,7 @@ class JoinRoomPresenterTest { topic = "Room topic", avatarUrl = "avatarUrl", numberOfJoinedMembers = 2, - roomType = null, + roomType = RoomType.Room, isHistoryWorldReadable = false, isJoined = false, isInvited = false, @@ -339,6 +340,7 @@ class JoinRoomPresenterTest { alias = RoomAlias("#alias:matrix.org"), numberOfMembers = 2, isDirect = false, + roomType = RoomType.Room, roomAvatarUrl = "avatarUrl", joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin ) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomType.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomType.kt new file mode 100644 index 0000000000..4b1f0dfd35 --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomType.kt @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.room + +sealed interface RoomType { + data object Space : RoomType + data object Room : RoomType + data class Other(val type: String) : RoomType +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt index 4dfec3add4..c2b3d87b16 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.api.room.preview 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.room.RoomType data class RoomPreview( /** The room id for this room. */ @@ -33,7 +34,7 @@ data class RoomPreview( /** The number of joined members. */ val numberOfJoinedMembers: Long, /** The room type (space, custom) or nothing, if it's a regular room. */ - val roomType: String?, + val roomType: RoomType, /** Is the history world-readable for this room? */ val isHistoryWorldReadable: Boolean, /** Is the room joined by the current user? */ diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomType.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomType.kt new file mode 100644 index 0000000000..206c15aba4 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomType.kt @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.room + +import io.element.android.libraries.matrix.api.room.RoomType + +fun String?.toRoomType(): RoomType { + return when (this) { + null -> RoomType.Room + "m.space" -> RoomType.Space + else -> RoomType.Other(this) + } +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt index 75286becda..e0ddb5c96e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt @@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.impl.room.preview 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.room.preview.RoomPreview +import io.element.android.libraries.matrix.impl.room.toRoomType import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview object RoomPreviewMapper { @@ -30,7 +31,7 @@ object RoomPreviewMapper { topic = roomPreview.topic, avatarUrl = roomPreview.avatarUrl, numberOfJoinedMembers = roomPreview.numJoinedMembers.toLong(), - roomType = roomPreview.roomType, + roomType = roomPreview.roomType.toRoomType(), isHistoryWorldReadable = roomPreview.isHistoryWorldReadable, isJoined = roomPreview.isJoined, isInvited = roomPreview.isInvited, From b175c2d2c3f7276abbcf124563b577d93d6b8268 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 16:36:10 +0200 Subject: [PATCH 151/289] Add a preview with the minimum available data. --- .../features/joinroom/impl/JoinRoomStateProvider.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 7c4cb2ea7d..615e264483 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -39,6 +39,13 @@ open class JoinRoomStateProvider : PreviewParameterProvider { aJoinRoomState( contentState = anUnknownContentState() ), + aJoinRoomState( + contentState = aLoadedContentState( + name = null, + alias = null, + topic = null, + ) + ), aJoinRoomState( contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin) ), @@ -86,7 +93,7 @@ fun aLoadingContentState(roomId: RoomId = A_ROOM_ID) = ContentState.Loading(room fun aLoadedContentState( roomId: RoomId = A_ROOM_ID, - name: String = "Element X android", + name: String? = "Element X android", alias: RoomAlias? = RoomAlias("#exa:matrix.org"), topic: String? = "Element X is a secure, private and decentralized messenger.", numberOfMembers: Long? = null, From 132b4e87eaaab66569cbdea50cbf42a92afb14ab Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 09:48:43 +0200 Subject: [PATCH 152/289] Avoid rendering roomId on screen. --- .../joinroom/impl/JoinRoomPresenter.kt | 2 +- .../features/joinroom/impl/JoinRoomState.kt | 8 ------- .../features/joinroom/impl/JoinRoomView.kt | 22 ++++++++++++++++--- .../atomic/atoms/RoomPreviewTitleAtom.kt | 8 ++++++- .../src/main/res/values/localazy.xml | 1 + 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 27adffbcb6..5b6e5ad79a 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -211,7 +211,7 @@ internal fun ContentState.toInviteData(): InviteData? { return when (this) { is ContentState.Loaded -> InviteData( roomId = roomId, - roomName = computedTitle, + roomName = name ?: roomId.value, isDirect = isDirect ) else -> null diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 1b78e10905..7c885214a1 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -55,14 +55,6 @@ sealed interface ContentState { val roomAvatarUrl: String?, val joinAuthorisationStatus: JoinAuthorisationStatus, ) : ContentState { - val computedTitle = name ?: roomId.value - - val computedSubtitle = when { - alias != null -> alias.value - name == null -> "" - else -> roomId.value - } - val showMemberCount = numberOfMembers != null fun avatarData(size: AvatarSize): AvatarData { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 6649987c58..7d579434f6 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -177,13 +178,28 @@ private fun JoinRoomContent( RoomPreviewOrganism( modifier = modifier, avatar = { - Avatar(contentState.avatarData(AvatarSize.RoomHeader)) + if (contentState.name == null && contentState.roomAvatarUrl == null) { + PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) + } else { + Avatar(contentState.avatarData(AvatarSize.RoomHeader)) + } }, title = { - RoomPreviewTitleAtom(contentState.computedTitle) + if (contentState.name != null) { + RoomPreviewTitleAtom( + title = contentState.name, + ) + } else { + RoomPreviewTitleAtom( + title = stringResource(id = CommonStrings.common_no_room_name), + fontStyle = FontStyle.Italic + ) + } }, subtitle = { - RoomPreviewSubtitleAtom(contentState.computedSubtitle) + if (contentState.alias != null) { + RoomPreviewSubtitleAtom(contentState.alias.value) + } }, description = { Column( diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewTitleAtom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewTitleAtom.kt index 81edd42db5..bccadf8198 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewTitleAtom.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewTitleAtom.kt @@ -18,17 +18,23 @@ package io.element.android.libraries.designsystem.atomic.atoms import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextAlign import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.theme.components.Text @Composable -fun RoomPreviewTitleAtom(title: String, modifier: Modifier = Modifier) { +fun RoomPreviewTitleAtom( + title: String, + modifier: Modifier = Modifier, + fontStyle: FontStyle? = null, +) { Text( modifier = modifier, text = title, style = ElementTheme.typography.fontHeadingMdBold, textAlign = TextAlign.Center, + fontStyle = fontStyle, color = ElementTheme.colors.textPrimary, ) } diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 8366daf9c4..7d49261c4e 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -158,6 +158,7 @@ "Modern" "Mute" "No results" + "No room name" "Offline" "or" "Password" From 2c2bf7c687c34166d0730ca4c64b9149d14fa716 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 18:10:28 +0200 Subject: [PATCH 153/289] Add screen to render Spaces (they are not supported yet) --- .../android/appnav/room/RoomFlowNode.kt | 10 +++++- .../joinroom/impl/JoinRoomPresenter.kt | 3 ++ .../features/joinroom/impl/JoinRoomState.kt | 1 + .../joinroom/impl/JoinRoomStateProvider.kt | 10 ++++++ .../features/joinroom/impl/JoinRoomView.kt | 36 +++++++++++++++++-- .../joinroom/impl/di/JoinRoomModule.kt | 3 ++ .../impl/src/main/res/values/localazy.xml | 2 ++ .../joinroom/impl/JoinRoomPresenterTest.kt | 5 +++ .../joinroom/impl/JoinRoomViewTest.kt | 16 +++++++++ .../atomic/atoms/RoomPreviewSubtitleAtom.kt | 2 +- 10 files changed, 84 insertions(+), 4 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index b0c0b5298a..f3cc3dfd28 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -128,7 +128,15 @@ class RoomFlowNode @AssistedInject constructor( Timber.d("Room membership: ${roomInfo.map { it.currentUserMembership }}") val info = roomInfo.getOrNull() if (info?.currentUserMembership == CurrentUserMembership.JOINED) { - backstack.newRoot(NavTarget.JoinedRoom(roomId)) + if (info.isSpace) { + // It should not happen, but probably due to an issue in the sliding sync, + // we can have a space here in case the space has just been joined. + // So navigate to the JoinRoom target for now, which will + // handle the space not supported screen + backstack.newRoot(NavTarget.JoinRoom(roomId)) + } else { + backstack.newRoot(NavTarget.JoinedRoom(roomId)) + } } else { backstack.newRoot(NavTarget.JoinRoom(roomId)) } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 5b6e5ad79a..6c2384e4e3 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -37,6 +37,7 @@ import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingState +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias @@ -57,6 +58,7 @@ class JoinRoomPresenter @AssistedInject constructor( private val matrixClient: MatrixClient, private val knockRoom: KnockRoom, private val acceptDeclineInvitePresenter: Presenter, + private val buildMeta: BuildMeta, ) : Presenter { interface Factory { fun create( @@ -135,6 +137,7 @@ class JoinRoomPresenter @AssistedInject constructor( contentState = contentState, acceptDeclineInviteState = acceptDeclineInviteState, knockAction = knockAction.value, + applicationName = buildMeta.applicationName, eventSink = ::handleEvents ) } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 7c885214a1..9146b13513 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -32,6 +32,7 @@ data class JoinRoomState( val contentState: ContentState, val acceptDeclineInviteState: AcceptDeclineInviteState, val knockAction: AsyncAction, + val applicationName: String, val eventSink: (JoinRoomEvents) -> Unit ) { val joinAuthorisationStatus = when (contentState) { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 615e264483..ee08ee954a 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -75,6 +75,15 @@ open class JoinRoomStateProvider : PreviewParameterProvider { aJoinRoomState( contentState = aFailureContentState(roomIdOrAlias = A_ROOM_ALIAS.toRoomIdOrAlias()) ), + aJoinRoomState( + contentState = aLoadedContentState( + roomId = RoomId("!aSpaceId:domain"), + name = "A space", + alias = null, + topic = "This is the topic of a space", + roomType = RoomType.Space, + ) + ), ) } @@ -122,6 +131,7 @@ fun aJoinRoomState( contentState = contentState, acceptDeclineInviteState = acceptDeclineInviteState, knockAction = knockAction, + applicationName = "AppName", eventSink = eventSink ) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 7d579434f6..706dc3a355 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -20,8 +20,10 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -33,6 +35,7 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewDescriptionAtom import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewSubtitleAtom @@ -55,6 +58,7 @@ import io.element.android.libraries.designsystem.theme.components.OutlinedButton 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.core.RoomIdOrAlias +import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.ui.components.InviteSenderView import io.element.android.libraries.ui.strings.CommonStrings @@ -76,7 +80,10 @@ fun JoinRoomView( JoinRoomTopBar(onBackClicked = onBackPressed) }, content = { - JoinRoomContent(contentState = state.contentState) + JoinRoomContent( + contentState = state.contentState, + applicationName = state.applicationName, + ) }, footer = { JoinRoomFooter( @@ -95,7 +102,8 @@ fun JoinRoomView( }, onRetry = { state.eventSink(JoinRoomEvents.RetryFetchingContent) - } + }, + onGoBack = onBackPressed, ) } ) @@ -116,6 +124,7 @@ private fun JoinRoomFooter( onJoinRoom: () -> Unit, onKnockRoom: () -> Unit, onRetry: () -> Unit, + onGoBack: () -> Unit, modifier: Modifier = Modifier, ) { if (state.contentState is ContentState.Failure) { @@ -125,6 +134,13 @@ private fun JoinRoomFooter( modifier = modifier.fillMaxWidth(), size = ButtonSize.Large, ) + } else if (state.contentState is ContentState.Loaded && state.contentState.roomType == RoomType.Space) { + Button( + text = stringResource(CommonStrings.action_go_back), + onClick = onGoBack, + modifier = modifier.fillMaxWidth(), + size = ButtonSize.Large, + ) } else { val joinAuthorisationStatus = state.joinAuthorisationStatus when (joinAuthorisationStatus) { @@ -171,6 +187,7 @@ private fun JoinRoomFooter( @Composable private fun JoinRoomContent( contentState: ContentState, + applicationName: String, modifier: Modifier = Modifier, ) { when (contentState) { @@ -211,6 +228,21 @@ private fun JoinRoomContent( InviteSenderView(inviteSender = inviteSender) } RoomPreviewDescriptionAtom(contentState.topic ?: "") + if (contentState.roomType == RoomType.Space) { + Spacer(modifier = Modifier.height(24.dp)) + Text( + text = stringResource(R.string.screen_join_room_space_not_supported_title), + textAlign = TextAlign.Center, + style = ElementTheme.typography.fontBodyLgMedium, + color = MaterialTheme.colorScheme.primary, + ) + Text( + text = stringResource(R.string.screen_join_room_space_not_supported_description, applicationName), + textAlign = TextAlign.Center, + style = ElementTheme.typography.fontBodyMdRegular, + color = MaterialTheme.colorScheme.secondary, + ) + } } }, memberCount = { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt index b2f9790088..c288021cdf 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt @@ -23,6 +23,7 @@ import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.joinroom.impl.JoinRoomPresenter import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId @@ -37,6 +38,7 @@ object JoinRoomModule { client: MatrixClient, knockRoom: KnockRoom, acceptDeclineInvitePresenter: Presenter, + buildMeta: BuildMeta, ): JoinRoomPresenter.Factory { return object : JoinRoomPresenter.Factory { override fun create( @@ -51,6 +53,7 @@ object JoinRoomModule { matrixClient = client, knockRoom = knockRoom, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter, + buildMeta = buildMeta, ) } } diff --git a/features/joinroom/impl/src/main/res/values/localazy.xml b/features/joinroom/impl/src/main/res/values/localazy.xml index 1c187d403d..103d512970 100644 --- a/features/joinroom/impl/src/main/res/values/localazy.xml +++ b/features/joinroom/impl/src/main/res/values/localazy.xml @@ -2,6 +2,8 @@ "Join room" "Knock to join" + "%1$s does not support spaces yet. You can access spaces on web." + "Spaces are not supported yet" "Click the button below and a room administrator will be notified. You’ll be able to join the conversation once approved." "You must be a member of this room to view the message history." "Want to join this room?" diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 165a63be77..3928ca31e8 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -24,6 +24,7 @@ import io.element.android.features.joinroom.impl.di.KnockRoom import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId @@ -36,6 +37,7 @@ import io.element.android.libraries.matrix.test.AN_EXCEPTION import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.FakeMatrixClient +import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.matrix.test.room.aRoomInfo import io.element.android.libraries.matrix.test.room.aRoomMember import io.element.android.libraries.matrix.ui.model.toInviteSender @@ -62,6 +64,7 @@ class JoinRoomPresenterTest { assertThat(state.contentState).isEqualTo(ContentState.Loading(A_ROOM_ID.toRoomIdOrAlias())) assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Unknown) assertThat(state.acceptDeclineInviteState).isEqualTo(anAcceptDeclineInviteState()) + assertThat(state.applicationName).isEqualTo("AppName") cancelAndIgnoreRemainingEvents() } } @@ -414,6 +417,7 @@ class JoinRoomPresenterTest { roomDescription: Optional = Optional.empty(), matrixClient: MatrixClient = FakeMatrixClient(), knockRoom: KnockRoom = FakeKnockRoom(), + buildMeta: BuildMeta = aBuildMeta(applicationName = "AppName"), acceptDeclineInvitePresenter: Presenter = Presenter { anAcceptDeclineInviteState() } ): JoinRoomPresenter { return JoinRoomPresenter( @@ -422,6 +426,7 @@ class JoinRoomPresenterTest { roomDescription = roomDescription, matrixClient = matrixClient, knockRoom = knockRoom, + buildMeta = buildMeta, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter ) } diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt index bd8f46295d..b4bd788286 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 import io.element.android.libraries.architecture.AsyncAction +import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.tests.testutils.EnsureNeverCalled import io.element.android.tests.testutils.EventsRecorder @@ -128,6 +129,21 @@ class JoinRoomViewTest { rule.clickOn(CommonStrings.action_retry) eventsRecorder.assertSingle(JoinRoomEvents.RetryFetchingContent) } + + @Test + fun `clicking on Go back when a space is displayed invokes the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(roomType = RoomType.Space), + eventSink = eventsRecorder, + ), + onBackPressed = it + ) + rule.clickOn(CommonStrings.action_go_back) + } + } } private fun AndroidComposeTestRule.setJoinRoomView( diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewSubtitleAtom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewSubtitleAtom.kt index 0548eadd17..8915b0fff4 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewSubtitleAtom.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoomPreviewSubtitleAtom.kt @@ -27,7 +27,7 @@ fun RoomPreviewSubtitleAtom(subtitle: String, modifier: Modifier = Modifier) { Text( modifier = modifier, text = subtitle, - style = ElementTheme.typography.fontBodyLgRegular, + style = ElementTheme.typography.fontBodyMdRegular, textAlign = TextAlign.Center, color = ElementTheme.colors.textSecondary, ) From 8f7b064773b2db002efc2d1c41553e00f642cf29 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 24 Apr 2024 18:05:34 +0200 Subject: [PATCH 154/289] Use Dash avatar for room with no name and no avatar. --- .../android/features/joinroom/impl/JoinRoomView.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 706dc3a355..48af082af8 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -47,6 +47,7 @@ import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.background.LightGradientBackground import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.avatar.Avatar +import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.SuperButton @@ -196,7 +197,15 @@ private fun JoinRoomContent( modifier = modifier, avatar = { if (contentState.name == null && contentState.roomAvatarUrl == null) { - PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) + // Use a Dash Avatar + Avatar( + AvatarData( + id = contentState.roomId.value, + name = "#", + url = null, + size = AvatarSize.RoomHeader, + ) + ) } else { Avatar(contentState.avatarData(AvatarSize.RoomHeader)) } From 3d29d8729aa2c630e74f949523c7b6b3852453c7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 10:10:55 +0200 Subject: [PATCH 155/289] Move `fun aRoomSummaryDetails()` to a regular Preview Provider --- .../components/RoomSummaryDetailsProvider.kt | 69 +++++++++++++++++++ .../matrix/ui/components/SelectedRoom.kt | 49 ++----------- 2 files changed, 74 insertions(+), 44 deletions(-) create mode 100644 libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/RoomSummaryDetailsProvider.kt diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/RoomSummaryDetailsProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/RoomSummaryDetailsProvider.kt new file mode 100644 index 0000000000..764d34ca25 --- /dev/null +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/RoomSummaryDetailsProvider.kt @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.ui.components + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +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.room.CurrentUserMembership +import io.element.android.libraries.matrix.api.room.RoomMember +import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.api.room.message.RoomMessage +import io.element.android.libraries.matrix.api.roomlist.RoomSummaryDetails + +open class RoomSummaryDetailsProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aRoomSummaryDetails(), + ) +} + +fun aRoomSummaryDetails( + roomId: RoomId = RoomId("!room:domain"), + name: String = "roomName", + canonicalAlias: RoomAlias? = null, + isDirect: Boolean = true, + avatarUrl: String? = null, + lastMessage: RoomMessage? = null, + inviter: RoomMember? = null, + notificationMode: RoomNotificationMode? = null, + hasRoomCall: Boolean = false, + isDm: Boolean = false, + numUnreadMentions: Int = 0, + numUnreadMessages: Int = 0, + numUnreadNotifications: Int = 0, + isMarkedUnread: Boolean = false, + isFavorite: Boolean = false, + currentUserMembership: CurrentUserMembership = CurrentUserMembership.JOINED, +) = RoomSummaryDetails( + roomId = roomId, + name = name, + canonicalAlias = canonicalAlias, + isDirect = isDirect, + avatarUrl = avatarUrl, + lastMessage = lastMessage, + inviter = inviter, + userDefinedNotificationMode = notificationMode, + hasRoomCall = hasRoomCall, + isDm = isDm, + numUnreadMentions = numUnreadMentions, + numUnreadMessages = numUnreadMessages, + numUnreadNotifications = numUnreadNotifications, + isMarkedUnread = isMarkedUnread, + isFavorite = isFavorite, + currentUserMembership = currentUserMembership, +) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt index 4b7c17a1ec..eeefc2dc65 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.components.avatar.Avatar @@ -43,12 +44,6 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Text -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.room.CurrentUserMembership -import io.element.android.libraries.matrix.api.room.RoomMember -import io.element.android.libraries.matrix.api.room.RoomNotificationMode -import io.element.android.libraries.matrix.api.room.message.RoomMessage import io.element.android.libraries.matrix.api.roomlist.RoomSummaryDetails import io.element.android.libraries.ui.strings.CommonStrings @@ -97,45 +92,11 @@ fun SelectedRoom( @PreviewsDayNight @Composable -internal fun SelectedRoomPreview() = ElementPreview { +internal fun SelectedRoomPreview( + @PreviewParameter(RoomSummaryDetailsProvider::class) roomSummaryDetails: RoomSummaryDetails +) = ElementPreview { SelectedRoom( - roomSummary = aRoomSummaryDetails(), + roomSummary = roomSummaryDetails, onRoomRemoved = {}, ) } - -fun aRoomSummaryDetails( - roomId: RoomId = RoomId("!room:domain"), - name: String = "roomName", - canonicalAlias: RoomAlias? = null, - isDirect: Boolean = true, - avatarUrl: String? = null, - lastMessage: RoomMessage? = null, - inviter: RoomMember? = null, - notificationMode: RoomNotificationMode? = null, - hasRoomCall: Boolean = false, - isDm: Boolean = false, - numUnreadMentions: Int = 0, - numUnreadMessages: Int = 0, - numUnreadNotifications: Int = 0, - isMarkedUnread: Boolean = false, - isFavorite: Boolean = false, - currentUserMembership: CurrentUserMembership = CurrentUserMembership.JOINED, -) = RoomSummaryDetails( - roomId = roomId, - name = name, - canonicalAlias = canonicalAlias, - isDirect = isDirect, - avatarUrl = avatarUrl, - lastMessage = lastMessage, - inviter = inviter, - userDefinedNotificationMode = notificationMode, - hasRoomCall = hasRoomCall, - isDm = isDm, - numUnreadMentions = numUnreadMentions, - numUnreadMessages = numUnreadMessages, - numUnreadNotifications = numUnreadNotifications, - isMarkedUnread = isMarkedUnread, - isFavorite = isFavorite, - currentUserMembership = currentUserMembership, -) From ce7bb11724ea1df1fc0e5f78f205432f1de969f5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 11:47:00 +0200 Subject: [PATCH 156/289] Ensure roomId are not rendered in the UI. Add preview to see the effect. Use RoomAvatar data fallback everywhere, to not use roomId (`!` char) for the avatar initial, but rather `#`. --- .../joinroom/impl/JoinRoomPresenter.kt | 1 + .../features/joinroom/impl/JoinRoomView.kt | 15 +------ ...DefaultNotificationSettingStateProvider.kt | 11 +++-- .../EditDefaultNotificationSettingView.kt | 7 ++- .../roomlist/impl/RoomListContextMenu.kt | 24 ++++------- .../roomlist/impl/RoomListPresenter.kt | 3 +- .../features/roomlist/impl/RoomListState.kt | 2 +- .../RoomListStateContextMenuShownProvider.kt | 43 +++++++++++++++++++ .../roomlist/impl/RoomListStateProvider.kt | 18 +------- .../impl/components/RoomSummaryRow.kt | 11 +++-- .../impl/model/RoomListRoomSummary.kt | 2 +- .../impl/model/RoomListRoomSummaryProvider.kt | 13 +++++- .../components/avatar/AvatarData.kt | 3 +- .../matrix/api/roomlist/RoomSummary.kt | 2 +- .../matrix/impl/roomlist/RoomListFilter.kt | 2 +- .../roomlist/RoomSummaryDetailsFactory.kt | 2 +- .../matrix/test/room/RoomSummaryFixture.kt | 2 +- .../components/RoomSummaryDetailsProvider.kt | 3 +- .../matrix/ui/components/SelectedRoom.kt | 3 +- .../roomselect/impl/RoomSelectPresenter.kt | 2 +- .../impl/RoomSelectStateProvider.kt | 3 ++ .../roomselect/impl/RoomSelectView.kt | 3 +- .../tests/konsist/KonsistPreviewTest.kt | 1 - 23 files changed, 107 insertions(+), 69 deletions(-) create mode 100644 features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateContextMenuShownProvider.kt diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 6c2384e4e3..ea88150c78 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -214,6 +214,7 @@ internal fun ContentState.toInviteData(): InviteData? { return when (this) { is ContentState.Loaded -> InviteData( roomId = roomId, + // Note: name should not be null at this point, but use Id just in case... roomName = name ?: roomId.value, isDirect = isDirect ) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 48af082af8..49541938d2 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -47,7 +47,6 @@ import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.background.LightGradientBackground import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.avatar.Avatar -import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.SuperButton @@ -196,19 +195,7 @@ private fun JoinRoomContent( RoomPreviewOrganism( modifier = modifier, avatar = { - if (contentState.name == null && contentState.roomAvatarUrl == null) { - // Use a Dash Avatar - Avatar( - AvatarData( - id = contentState.roomId.value, - name = "#", - url = null, - size = AvatarSize.RoomHeader, - ) - ) - } else { - Avatar(contentState.avatarData(AvatarSize.RoomHeader)) - } + Avatar(contentState.avatarData(AvatarSize.RoomHeader)) }, title = { if (contentState.name != null) { diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingStateProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingStateProvider.kt index 1eb7c0389e..703050227e 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingStateProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingStateProvider.kt @@ -42,16 +42,21 @@ private fun anEditDefaultNotificationSettingsState( ) = EditDefaultNotificationSettingState( isOneToOne = isOneToOne, mode = RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY, - roomsWithUserDefinedMode = persistentListOf(aRoomSummary()), + roomsWithUserDefinedMode = persistentListOf( + aRoomSummary("Room"), + aRoomSummary(null), + ), changeNotificationSettingAction = changeNotificationSettingAction, displayMentionsOnlyDisclaimer = displayMentionsOnlyDisclaimer, eventSink = {} ) -private fun aRoomSummary() = RoomSummary.Filled( +private fun aRoomSummary( + name: String?, +) = RoomSummary.Filled( aRoomSummaryDetails( roomId = RoomId("!roomId:domain"), - name = "Room", + name = name, avatarUrl = null, isDirect = false, lastMessage = null, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingView.kt index 9eca90fa54..1938a4b4f0 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingView.kt @@ -21,6 +21,7 @@ import androidx.compose.foundation.selection.selectableGroup import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.tooling.preview.PreviewParameter import io.element.android.features.preferences.impl.R import io.element.android.libraries.designsystem.components.async.AsyncActionView @@ -100,7 +101,11 @@ fun EditDefaultNotificationSettingView( ) ListItem( headlineContent = { - Text(text = summary.details.name) + val roomName = summary.details.name + Text( + text = roomName ?: stringResource(id = CommonStrings.common_no_room_name), + fontStyle = FontStyle.Italic.takeIf { roomName == null } + ) }, supportingContent = { Text(text = subtitle) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContextMenu.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContextMenu.kt index 1ab51a5219..4d7a6b3855 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContextMenu.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContextMenu.kt @@ -24,6 +24,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.tooling.preview.PreviewParameter import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.components.list.ListItemContent @@ -87,8 +89,9 @@ private fun RoomListModalBottomSheetContent( ListItem( headlineContent = { Text( - text = contextMenu.roomName, + text = contextMenu.roomName ?: stringResource(id = CommonStrings.common_no_room_name), style = ElementTheme.typography.fontBodyLgMedium, + fontStyle = FontStyle.Italic.takeIf { contextMenu.roomName == null } ) } ) @@ -192,22 +195,11 @@ private fun RoomListModalBottomSheetContent( // Remove this preview when the issue is fixed. @PreviewsDayNight @Composable -internal fun RoomListModalBottomSheetContentPreview() = ElementPreview { +internal fun RoomListModalBottomSheetContentPreview( + @PreviewParameter(RoomListStateContextMenuShownProvider::class) contextMenu: RoomListState.ContextMenu.Shown +) = ElementPreview { RoomListModalBottomSheetContent( - contextMenu = aContextMenuShown(hasNewContent = true), - onRoomMarkReadClicked = {}, - onRoomMarkUnreadClicked = {}, - onRoomSettingsClicked = {}, - onLeaveRoomClicked = {}, - onFavoriteChanged = {}, - ) -} - -@PreviewsDayNight -@Composable -internal fun RoomListModalBottomSheetContentForDmPreview() = ElementPreview { - RoomListModalBottomSheetContent( - contextMenu = aContextMenuShown(isDm = true), + contextMenu = contextMenu, onRoomMarkReadClicked = {}, onRoomMarkUnreadClicked = {}, onRoomSettingsClicked = {}, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index c455cdff17..e610c33571 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -298,6 +298,7 @@ class RoomListPresenter @Inject constructor( @VisibleForTesting internal fun RoomListRoomSummary.toInviteData() = InviteData( roomId = roomId, - roomName = name, + // Note: `name` should not be null at this point, but just in case, fallback to the roomId + roomName = name ?: roomId.value, isDirect = isDirect, ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt index ed72c622c7..9f5b0d6b0d 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt @@ -48,7 +48,7 @@ data class RoomListState( data object Hidden : ContextMenu data class Shown( val roomId: RoomId, - val roomName: String, + val roomName: String?, val isDm: Boolean, val isFavorite: Boolean, val markAsUnreadFeatureFlagEnabled: Boolean, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateContextMenuShownProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateContextMenuShownProvider.kt new file mode 100644 index 0000000000..309dd9b5a0 --- /dev/null +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateContextMenuShownProvider.kt @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomlist.impl + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.libraries.matrix.api.core.RoomId + +open class RoomListStateContextMenuShownProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aContextMenuShown(hasNewContent = true), + aContextMenuShown(isDm = true), + aContextMenuShown(roomName = null) + ) +} + +internal fun aContextMenuShown( + roomName: String? = "aRoom", + isDm: Boolean = false, + hasNewContent: Boolean = false, + isFavorite: Boolean = false, +) = RoomListState.ContextMenu.Shown( + roomId = RoomId("!aRoom:aDomain"), + roomName = roomName, + isDm = isDm, + markAsUnreadFeatureFlagEnabled = true, + hasNewContent = hasNewContent, + isFavorite = isFavorite, +) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index bf73a74ef8..976040b5a7 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -32,7 +32,6 @@ import io.element.android.features.roomlist.impl.search.aRoomListSearchState import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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.MatrixUser import io.element.android.libraries.ui.strings.CommonStrings @@ -45,6 +44,7 @@ open class RoomListStateProvider : PreviewParameterProvider { aRoomListState(), aRoomListState(snackbarMessage = SnackbarMessage(CommonStrings.common_verification_complete)), aRoomListState(hasNetworkConnection = false), + aRoomListState(contextMenu = aContextMenuShown(roomName = null)), aRoomListState(contextMenu = aContextMenuShown(roomName = "A nice room name")), aRoomListState(contextMenu = aContextMenuShown(isFavorite = true)), aRoomListState(contentState = aRoomsContentState(securityBannerState = SecurityBannerState.RecoveryKeyConfirmation)), @@ -109,7 +109,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { ), aRoomListRoomSummary( id = "!roomId3:domain", - displayType = RoomSummaryDisplayType.PLACEHOLDER, + displayType = RoomSummaryDisplayType.PLACEHOLDER, ), aRoomListRoomSummary( id = "!roomId4:domain", @@ -117,17 +117,3 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { ), ) } - -internal fun aContextMenuShown( - roomName: String = "aRoom", - isDm: Boolean = false, - hasNewContent: Boolean = false, - isFavorite: Boolean = false, -) = RoomListState.ContextMenu.Shown( - roomId = RoomId("!aRoom:aDomain"), - roomName = roomName, - isDm = isDm, - markAsUnreadFeatureFlagEnabled = true, - hasNewContent = hasNewContent, - isFavorite = isFavorite, -) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 77a93c46c1..a14140297c 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -41,6 +41,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -168,7 +169,7 @@ private fun RoomSummaryScaffoldRow( @Composable private fun NameAndTimestampRow( - name: String, + name: String?, timestamp: String?, isHighlighted: Boolean, modifier: Modifier = Modifier @@ -181,7 +182,8 @@ private fun NameAndTimestampRow( Text( modifier = Modifier.weight(1f), style = ElementTheme.typography.fontBodyLgMedium, - text = name, + text = name ?: stringResource(id = CommonStrings.common_no_room_name), + fontStyle = FontStyle.Italic.takeIf { name == null }, color = MaterialTheme.roomListRoomName(), maxLines = 1, overflow = TextOverflow.Ellipsis @@ -272,7 +274,7 @@ private fun LastMessageAndIndicatorRow( @Composable private fun InviteNameAndIndicatorRow( - name: String, + name: String?, modifier: Modifier = Modifier, ) { Row( @@ -283,7 +285,8 @@ private fun InviteNameAndIndicatorRow( Text( modifier = Modifier.weight(1f), style = ElementTheme.typography.fontBodyLgMedium, - text = name, + text = name ?: stringResource(id = CommonStrings.common_no_room_name), + fontStyle = FontStyle.Italic.takeIf { name == null }, color = MaterialTheme.roomListRoomName(), maxLines = 1, overflow = TextOverflow.Ellipsis diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index 84c4cd45c3..9afa6cd749 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -28,7 +28,7 @@ data class RoomListRoomSummary( val id: String, val displayType: RoomSummaryDisplayType, val roomId: RoomId, - val name: String, + val name: String?, val canonicalAlias: RoomAlias?, val numberOfUnreadMessages: Int, val numberOfUnreadMentions: Int, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 005044e60d..a39d50eac0 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -31,6 +31,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider var startIndex = 0 val initial = dn[startIndex] diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt index 2ab50630a1..425da8d3ca 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomSummary.kt @@ -37,7 +37,7 @@ sealed interface RoomSummary { data class RoomSummaryDetails( val roomId: RoomId, - val name: String, + val name: String?, val canonicalAlias: RoomAlias?, val isDirect: Boolean, val avatarUrl: String?, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt index 3aac08c823..d7f2acf87d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilter.kt @@ -40,7 +40,7 @@ val RoomListFilter.predicate (roomSummary.details.numUnreadNotifications > 0 || roomSummary.details.isMarkedUnread) } is RoomListFilter.NormalizedMatchRoomName -> { roomSummary: RoomSummary -> - roomSummary is RoomSummary.Filled && roomSummary.details.name.contains(pattern, ignoreCase = true) + roomSummary is RoomSummary.Filled && roomSummary.details.name.orEmpty().contains(pattern, ignoreCase = true) } RoomListFilter.Invite -> { roomSummary: RoomSummary -> roomSummary.isInvited() diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt index a70030cc70..a0c283cb1e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt @@ -33,7 +33,7 @@ class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFacto } return RoomSummaryDetails( roomId = RoomId(roomInfo.id), - name = roomInfo.name ?: roomInfo.id, + name = roomInfo.name, canonicalAlias = roomInfo.canonicalAlias?.let(::RoomAlias), isDirect = roomInfo.isDirect, avatarUrl = roomInfo.avatarUrl, diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt index 6b9383ef05..d9fdffa62a 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt @@ -63,7 +63,7 @@ fun aRoomSummaryFilled( fun aRoomSummaryDetails( roomId: RoomId = A_ROOM_ID, - name: String = A_ROOM_NAME, + name: String? = A_ROOM_NAME, isDirect: Boolean = false, avatarUrl: String? = null, lastMessage: RoomMessage? = aRoomMessage(), diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/RoomSummaryDetailsProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/RoomSummaryDetailsProvider.kt index 764d34ca25..a433f49395 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/RoomSummaryDetailsProvider.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/RoomSummaryDetailsProvider.kt @@ -29,12 +29,13 @@ open class RoomSummaryDetailsProvider : PreviewParameterProvider get() = sequenceOf( aRoomSummaryDetails(), + aRoomSummaryDetails(name = null), ) } fun aRoomSummaryDetails( roomId: RoomId = RoomId("!room:domain"), - name: String = "roomName", + name: String? = "roomName", canonicalAlias: RoomAlias? = null, isDirect: Boolean = true, avatarUrl: String? = null, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt index eeefc2dc65..c95f3e4cde 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt @@ -62,7 +62,8 @@ fun SelectedRoom( ) { Avatar(AvatarData(roomSummary.roomId.value, roomSummary.name, roomSummary.avatarUrl, AvatarSize.SelectedRoom)) Text( - text = roomSummary.name, + // If name is null, we do not have space to render "No room name", so just use `#` here. + text = roomSummary.name ?: "#", overflow = TextOverflow.Ellipsis, maxLines = 1, style = MaterialTheme.typography.bodyLarge, diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt index 5a32a64ac1..77eb7b9845 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt @@ -57,7 +57,7 @@ class RoomSelectPresenter @AssistedInject constructor( LaunchedEffect(query, summaries) { val filteredSummaries = summaries.filterIsInstance() .map { it.details } - .filter { it.name.contains(query, ignoreCase = true) } + .filter { it.name.orEmpty().contains(query, ignoreCase = true) } .distinctBy { it.roomId } // This should be removed once we're sure no duplicate Rooms can be received .toPersistentList() results = if (filteredSummaries.isNotEmpty()) { diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt index f0daf8b7fa..d9b6f3f040 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt @@ -68,4 +68,7 @@ private fun aForwardMessagesRoomList() = persistentListOf( name = "Room with alias", canonicalAlias = RoomAlias("#alias:example.org"), ), + aRoomSummaryDetails( + name = null, + ), ) diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt index eb6143107f..9c351a3a9e 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt @@ -235,7 +235,8 @@ private fun RoomSummaryView( // Name Text( style = ElementTheme.typography.fontBodyLgRegular, - text = summary.name, + // If name is null, we do not have space to render "No room name", so just use `#` here. + text = summary.name ?: "#", color = ElementTheme.colors.textPrimary, maxLines = 1, overflow = TextOverflow.Ellipsis diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index be7780b4e7..6145e9bcdc 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -101,7 +101,6 @@ class KonsistPreviewTest { "PollContentViewEndedPreview", "PollContentViewUndisclosedPreview", "ReadReceiptBottomSheetPreview", - "RoomListModalBottomSheetContentForDmPreview", "RoomMemberListViewBannedPreview", "SasEmojisPreview", "SecureBackupSetupViewChangePreview", From 8272b7a16c707e1c30f3f9daaa2a8ff0dc36b525 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 12:29:44 +0200 Subject: [PATCH 157/289] Use fallback name in this case. --- .../android/libraries/roomselect/impl/RoomSelectView.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt index 9c351a3a9e..77df71c268 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt @@ -36,6 +36,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -235,8 +236,8 @@ private fun RoomSummaryView( // Name Text( style = ElementTheme.typography.fontBodyLgRegular, - // If name is null, we do not have space to render "No room name", so just use `#` here. - text = summary.name ?: "#", + text = summary.name ?: stringResource(id = CommonStrings.common_no_room_name), + fontStyle = FontStyle.Italic.takeIf { summary.name == null }, color = ElementTheme.colors.textPrimary, maxLines = 1, overflow = TextOverflow.Ellipsis From 5951182bdfc24b8a94c3cfe355749a0b533d28ca Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 12:39:25 +0200 Subject: [PATCH 158/289] Fix issue when building previews, roomId must be unique --- .../android/libraries/roomselect/impl/RoomSelectStateProvider.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt index d9b6f3f040..7bfddeb280 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectStateProvider.kt @@ -69,6 +69,7 @@ private fun aForwardMessagesRoomList() = persistentListOf( canonicalAlias = RoomAlias("#alias:example.org"), ), aRoomSummaryDetails( + roomId = RoomId("!room3:domain"), name = null, ), ) From bffa2d717fc304480c57e5aab3ff090d6a3f7a37 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 25 Apr 2024 12:41:34 +0200 Subject: [PATCH 159/289] Timeline : continue to fix more tests... --- .../appnav/JoinRoomLoadedFlowNodeTest.kt | 5 +- .../actions/AndroidLocationActionsTest.kt | 2 + .../messages/impl/MessagesPresenterTest.kt | 43 ++++++++--- .../MessageComposerPresenterTest.kt | 74 ++++++++++++++++--- .../features/poll/impl/PollFixtures.kt | 11 +-- .../impl/create/CreatePollPresenterTest.kt | 71 ++++++++++++------ .../impl/history/PollHistoryPresenterTest.kt | 36 ++++++--- .../android/samples/minimal/RoomListScreen.kt | 3 +- .../tests/testutils/lambda/LambdaRecorder.kt | 16 ++++ 9 files changed, 198 insertions(+), 63 deletions(-) diff --git a/appnav/src/test/kotlin/io/element/android/appnav/JoinRoomLoadedFlowNodeTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/JoinRoomLoadedFlowNodeTest.kt index 2809fc95ee..93e727da75 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/JoinRoomLoadedFlowNodeTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/JoinRoomLoadedFlowNodeTest.kt @@ -27,6 +27,7 @@ import com.bumble.appyx.testing.junit4.util.MainDispatcherRule import com.bumble.appyx.testing.unit.common.helper.parentNodeTestHelper import com.google.common.truth.Truth.assertThat import io.element.android.appnav.di.RoomComponentFactory +import io.element.android.appnav.room.RoomNavigationTarget import io.element.android.appnav.room.joined.JoinedRoomLoadedFlowNode import io.element.android.features.messages.api.MessagesEntryPoint import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint @@ -124,7 +125,7 @@ class JoinRoomLoadedFlowNodeTest { // GIVEN val room = FakeMatrixRoom() val fakeMessagesEntryPoint = FakeMessagesEntryPoint() - val inputs = JoinedRoomLoadedFlowNode.Inputs(room) + val inputs = JoinedRoomLoadedFlowNode.Inputs(room, RoomNavigationTarget.Messages()) val roomFlowNode = createJoinedRoomLoadedFlowNode( plugins = listOf(inputs), messagesEntryPoint = fakeMessagesEntryPoint, @@ -146,7 +147,7 @@ class JoinRoomLoadedFlowNodeTest { val room = FakeMatrixRoom() val fakeMessagesEntryPoint = FakeMessagesEntryPoint() val fakeRoomDetailsEntryPoint = FakeRoomDetailsEntryPoint() - val inputs = JoinedRoomLoadedFlowNode.Inputs(room) + val inputs = JoinedRoomLoadedFlowNode.Inputs(room, RoomNavigationTarget.Messages()) val roomFlowNode = createJoinedRoomLoadedFlowNode( plugins = listOf(inputs), messagesEntryPoint = fakeMessagesEntryPoint, diff --git a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActionsTest.kt b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActionsTest.kt index 6cd7cf82ce..9665c886d7 100644 --- a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActionsTest.kt +++ b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActionsTest.kt @@ -18,9 +18,11 @@ package io.element.android.features.location.impl.common.actions import com.google.common.truth.Truth.assertThat import io.element.android.features.location.api.Location +import org.junit.Ignore import org.junit.Test import java.net.URLEncoder +@Ignore internal class AndroidLocationActionsTest { // We use an Android-native encoder in the actual app, switch to an equivalent JVM one for the tests private fun urlEncoder(input: String) = URLEncoder.encode(input, "US-ASCII") diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 78dc7612a8..2774b71aef 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -65,6 +65,7 @@ import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.featureflag.test.InMemoryAppPreferencesStore import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore +import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState @@ -83,6 +84,7 @@ import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.aRoomInfo import io.element.android.libraries.matrix.test.room.aRoomMember +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.mediapickers.test.FakePickerProvider import io.element.android.libraries.mediaplayer.test.FakeMediaPlayer import io.element.android.libraries.mediaupload.api.MediaSender @@ -97,6 +99,9 @@ import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.consumeItemsUntilPredicate import io.element.android.tests.testutils.consumeItemsUntilTimeout +import io.element.android.tests.testutils.lambda.assert +import io.element.android.tests.testutils.lambda.lambdaRecorder +import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.testCoroutineDispatchers import io.mockk.mockk import kotlinx.collections.immutable.persistentListOf @@ -169,7 +174,13 @@ class MessagesPresenterTest { @Test fun `present - handle toggling a reaction`() = runTest { val coroutineDispatchers = testCoroutineDispatchers(useUnconfinedTestDispatcher = true) - val room = FakeMatrixRoom() + val toggleReactionSuccess = lambdaRecorder { _: String, _: EventId -> Result.success(Unit) } + val toggleReactionFailure = lambdaRecorder { _: String, _: EventId -> Result.failure(IllegalStateException("Failed to send reaction")) } + + val timeline = FakeTimeline().apply { + this.toggleReactionLambda = toggleReactionSuccess + } + val room = FakeMatrixRoom(liveTimeline = timeline) val presenter = createMessagesPresenter(matrixRoom = room, coroutineDispatchers = coroutineDispatchers) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -177,29 +188,42 @@ class MessagesPresenterTest { skipItems(1) val initialState = awaitItem() initialState.eventSink.invoke(MessagesEvents.ToggleReaction("👍", AN_EVENT_ID)) - assertThat(room.myReactions.count()).isEqualTo(1) // No crashes when sending a reaction failed - room.givenToggleReactionResult(Result.failure(IllegalStateException("Failed to send reaction"))) + timeline.apply { toggleReactionLambda = toggleReactionFailure } initialState.eventSink.invoke(MessagesEvents.ToggleReaction("👍", AN_EVENT_ID)) - assertThat(room.myReactions.count()).isEqualTo(1) assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) + + assert(toggleReactionSuccess) + .isCalledOnce() + .with(value("👍"), value(AN_EVENT_ID)) + assert(toggleReactionFailure) + .isCalledOnce() + .with(value("👍"), value(AN_EVENT_ID)) } } @Test fun `present - handle toggling a reaction twice`() = runTest { val coroutineDispatchers = testCoroutineDispatchers(useUnconfinedTestDispatcher = true) - val room = FakeMatrixRoom() + val toggleReactionSuccess = lambdaRecorder { _: String, _: EventId -> Result.success(Unit) } + + val timeline = FakeTimeline().apply { + this.toggleReactionLambda = toggleReactionSuccess + } + val room = FakeMatrixRoom(liveTimeline = timeline) val presenter = createMessagesPresenter(matrixRoom = room, coroutineDispatchers = coroutineDispatchers) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { val initialState = awaitFirstItem() initialState.eventSink.invoke(MessagesEvents.ToggleReaction("👍", AN_EVENT_ID)) - assertThat(room.myReactions.count()).isEqualTo(1) - initialState.eventSink.invoke(MessagesEvents.ToggleReaction("👍", AN_EVENT_ID)) - assertThat(room.myReactions.count()).isEqualTo(0) + assert(toggleReactionSuccess) + .isCalledExactly(2) + .withSequence( + listOf(value("👍"), value(AN_EVENT_ID)), + listOf(value("👍"), value(AN_EVENT_ID)), + ) } } @@ -274,7 +298,7 @@ class MessagesPresenterTest { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - skipItems(3) + skipItems(2) val initialState = awaitItem() initialState.eventSink.invoke(MessagesEvents.HandleAction(TimelineItemAction.Reply, aMessageEvent(eventId = null))) assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) @@ -430,7 +454,6 @@ class MessagesPresenterTest { initialState.eventSink.invoke(MessagesEvents.HandleAction(TimelineItemAction.Redact, aMessageEvent())) assertThat(matrixRoom.redactEventEventIdParam).isEqualTo(AN_EVENT_ID) assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) - skipItems(1) // back paginating } } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt index b099562480..c30d427239 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt @@ -66,6 +66,7 @@ import io.element.android.libraries.matrix.test.permalink.FakePermalinkBuilder import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.aRoomMember +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.mediapickers.api.PickerProvider import io.element.android.libraries.mediapickers.test.FakePickerProvider import io.element.android.libraries.mediaupload.api.MediaPreProcessor @@ -82,6 +83,10 @@ import io.element.android.libraries.textcomposer.model.Suggestion import io.element.android.libraries.textcomposer.model.SuggestionType import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.lambda.any +import io.element.android.tests.testutils.lambda.assert +import io.element.android.tests.testutils.lambda.lambdaRecorder +import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.waitForPredicate import io.mockk.mockk import kotlinx.collections.immutable.persistentListOf @@ -260,7 +265,13 @@ class MessageComposerPresenterTest { @Test fun `present - edit sent message`() = runTest { - val fakeMatrixRoom = FakeMatrixRoom() + val editMessageLambda = lambdaRecorder { _: EventId?, _: TransactionId?, _: String, _: String?, _: List -> + Result.success(Unit) + } + val timeline = FakeTimeline().apply { + this.editMessageLambda = editMessageLambda + } + val fakeMatrixRoom = FakeMatrixRoom(liveTimeline = timeline) val presenter = createPresenter( this, fakeMatrixRoom, @@ -284,7 +295,13 @@ class MessageComposerPresenterTest { skipItems(1) val messageSentState = awaitItem() assertThat(messageSentState.richTextEditorState.messageHtml).isEqualTo("") - assertThat(fakeMatrixRoom.editMessageCalls.first()).isEqualTo(ANOTHER_MESSAGE to ANOTHER_MESSAGE) + + advanceUntilIdle() + + assert(editMessageLambda) + .isCalledOnce() + .with(any(), any(), value(ANOTHER_MESSAGE), value(ANOTHER_MESSAGE), any()) + assertThat(analyticsService.capturedEvents).containsExactly( Composer( inThread = false, @@ -298,7 +315,13 @@ class MessageComposerPresenterTest { @Test fun `present - edit not sent message`() = runTest { - val fakeMatrixRoom = FakeMatrixRoom() + val editMessageLambda = lambdaRecorder { _: EventId?, _: TransactionId?, _: String, _: String?, _: List -> + Result.success(Unit) + } + val timeline = FakeTimeline().apply { + this.editMessageLambda = editMessageLambda + } + val fakeMatrixRoom = FakeMatrixRoom(liveTimeline = timeline) val presenter = createPresenter( this, fakeMatrixRoom, @@ -322,7 +345,13 @@ class MessageComposerPresenterTest { skipItems(1) val messageSentState = awaitItem() assertThat(messageSentState.richTextEditorState.messageHtml).isEqualTo("") - assertThat(fakeMatrixRoom.editMessageCalls.first()).isEqualTo(ANOTHER_MESSAGE to ANOTHER_MESSAGE) + + advanceUntilIdle() + + assert(editMessageLambda) + .isCalledOnce() + .with(any(), any(), value(ANOTHER_MESSAGE), value(ANOTHER_MESSAGE), any()) + assertThat(analyticsService.capturedEvents).containsExactly( Composer( inThread = false, @@ -336,7 +365,13 @@ class MessageComposerPresenterTest { @Test fun `present - reply message`() = runTest { - val fakeMatrixRoom = FakeMatrixRoom() + val replyMessageLambda = lambdaRecorder {_: EventId, _: String, _: String?, _:List -> + Result.success(Unit) + } + val timeline = FakeTimeline().apply { + this.replyMessageLambda = replyMessageLambda + } + val fakeMatrixRoom = FakeMatrixRoom(liveTimeline = timeline) val presenter = createPresenter( this, fakeMatrixRoom, @@ -356,7 +391,13 @@ class MessageComposerPresenterTest { state.eventSink.invoke(MessageComposerEvents.SendMessage(A_REPLY.toMessage())) val messageSentState = awaitItem() assertThat(messageSentState.richTextEditorState.messageHtml).isEqualTo("") - assertThat(fakeMatrixRoom.replyMessageParameter).isEqualTo(A_REPLY to A_REPLY) + + advanceUntilIdle() + + assert(replyMessageLambda) + .isCalledOnce() + .with(any(),value(A_REPLY),value(A_REPLY),any()) + assertThat(analyticsService.capturedEvents).containsExactly( Composer( inThread = false, @@ -832,7 +873,17 @@ class MessageComposerPresenterTest { @OptIn(ExperimentalCoroutinesApi::class) @Test fun `present - send messages with intentional mentions`() = runTest { - val room = FakeMatrixRoom() + val replyMessageLambda = lambdaRecorder {_: EventId, _: String, _: String?, _:List -> + Result.success(Unit) + } + val editMessageLambda = lambdaRecorder { _: EventId?, _: TransactionId?, _: String, _: String?, _: List -> + Result.success(Unit) + } + val timeline = FakeTimeline().apply { + this.replyMessageLambda = replyMessageLambda + this.editMessageLambda = editMessageLambda + } + val room = FakeMatrixRoom(liveTimeline = timeline) val presenter = createPresenter(room = room, coroutineScope = this) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -867,7 +918,9 @@ class MessageComposerPresenterTest { initialState.eventSink(MessageComposerEvents.SendMessage(A_MESSAGE.toMessage())) advanceUntilIdle() - assertThat(room.sendMessageMentions).isEqualTo(listOf(Mention.User(A_USER_ID_2))) + assert(replyMessageLambda) + .isCalledOnce() + .with(any(), any(), any(), value(listOf(Mention.User(A_USER_ID_2)))) // Check intentional mentions on edit message skipItems(1) @@ -883,7 +936,10 @@ class MessageComposerPresenterTest { initialState.eventSink(MessageComposerEvents.SendMessage(A_MESSAGE.toMessage())) advanceUntilIdle() - assertThat(room.sendMessageMentions).isEqualTo(listOf(Mention.User(A_USER_ID_3))) + assert(editMessageLambda) + .isCalledOnce() + .with(any(), any(), any(), any(), value(listOf(Mention.User(A_USER_ID_3)))) + skipItems(1) } diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt index 84ef0aae31..c0a5b4f7f7 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/PollFixtures.kt @@ -20,16 +20,17 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.poll.PollAnswer import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent -import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.matrix.test.timeline.aPollContent import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf -fun aPollTimeline( +fun aPollTimelineItems( polls: Map = emptyMap(), -): FakeTimeline { - return FakeTimeline( - initialTimelineItems = polls.map { entry -> +): Flow> { + return flowOf( + polls.map { entry -> MatrixTimelineItem.Event( entry.key.value, anEventTimelineItem( diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt index 445187168e..0b33b7762f 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt @@ -25,33 +25,42 @@ import im.vector.app.features.analytics.plan.Composer import im.vector.app.features.analytics.plan.PollCreation import io.element.android.features.messages.test.FakeMessageComposerContext import io.element.android.features.poll.api.create.CreatePollMode -import io.element.android.features.poll.impl.aPollTimeline +import io.element.android.features.poll.impl.aPollTimelineItems import io.element.android.features.poll.impl.anOngoingPollContent import io.element.android.features.poll.impl.data.PollRepository +import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.SavePollInvocation +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.lambda.assert +import io.element.android.tests.testutils.lambda.lambdaRecorder +import io.element.android.tests.testutils.lambda.value +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.delay +import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test -class CreatePollPresenterTest { +@OptIn(ExperimentalCoroutinesApi::class) class CreatePollPresenterTest { @get:Rule val warmUpRule = WarmUpRule() private val pollEventId = AN_EVENT_ID private var navUpInvocationsCount = 0 private val existingPoll = anOngoingPollContent() + private val timeline = FakeTimeline( + timelineItems = aPollTimelineItems(mapOf(pollEventId to existingPoll)) + ) private val fakeMatrixRoom = FakeMatrixRoom( - liveTimeline = aPollTimeline( - mapOf(pollEventId to existingPoll) - ) + liveTimeline = timeline ) private val fakeAnalyticsService = FakeAnalyticsService() private val fakeMessageComposerContext = FakeMessageComposerContext() @@ -80,7 +89,7 @@ class CreatePollPresenterTest { @Test fun `in edit mode, if poll doesn't exist, error is tracked and screen is closed`() = runTest { val room = FakeMatrixRoom( - liveTimeline = aPollTimeline() + liveTimeline = FakeTimeline() ) val presenter = createCreatePollPresenter(mode = CreatePollMode.EditPoll(AN_EVENT_ID), room = room) moleculeFlow(RecompositionMode.Immediate) { @@ -180,6 +189,12 @@ class CreatePollPresenterTest { @Test fun `edit poll sends a poll edit event`() = runTest { + val editPollLambda = lambdaRecorder { _: EventId, _: String, _: List, _: Int, _: PollKind -> + Result.success(Unit) + } + timeline.apply { + this.editPollLambda = editPollLambda + } val presenter = createCreatePollPresenter(mode = CreatePollMode.EditPoll(pollEventId)) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -201,16 +216,18 @@ class CreatePollPresenterTest { ).apply { eventSink(CreatePollEvents.Save) } - delay(1) // Wait for the coroutine to finish - assertThat(fakeMatrixRoom.editPollInvocations.size).isEqualTo(1) - assertThat(fakeMatrixRoom.editPollInvocations.last()).isEqualTo( - SavePollInvocation( - question = "Changed question", - answers = listOf("Changed answer 1", "Changed answer 2", "Maybe"), - maxSelections = 1, - pollKind = PollKind.Disclosed + advanceUntilIdle() // Wait for the coroutine to finish + + assert(editPollLambda) + .isCalledOnce() + .with( + value(pollEventId), + value("Changed question"), + value(listOf("Changed answer 1", "Changed answer 2", "Maybe")), + value(1), + value(PollKind.Disclosed) ) - ) + assertThat(fakeAnalyticsService.capturedEvents.size).isEqualTo(2) assertThat(fakeAnalyticsService.capturedEvents[0]).isEqualTo( Composer( @@ -233,6 +250,12 @@ class CreatePollPresenterTest { @Test fun `when edit poll fails, error is tracked`() = runTest { val error = Exception("cause") + val editPollLambda = lambdaRecorder { _: EventId, _: String, _: List, _: Int, _: PollKind -> + Result.failure(error) + } + timeline.apply { + this.editPollLambda = editPollLambda + } fakeMatrixRoom.givenEditPollResult(Result.failure(error)) val presenter = createCreatePollPresenter(mode = CreatePollMode.EditPoll(pollEventId)) moleculeFlow(RecompositionMode.Immediate) { @@ -241,8 +264,8 @@ class CreatePollPresenterTest { awaitDefaultItem() awaitPollLoaded().eventSink(CreatePollEvents.SetAnswer(0, "A")) awaitPollLoaded(newAnswer1 = "A").eventSink(CreatePollEvents.Save) - delay(1) // Wait for the coroutine to finish - assertThat(fakeMatrixRoom.editPollInvocations).hasSize(1) + advanceUntilIdle() // Wait for the coroutine to finish + assert(editPollLambda).isCalledOnce() assertThat(fakeAnalyticsService.capturedEvents).isEmpty() assertThat(fakeAnalyticsService.trackedErrors).hasSize(1) assertThat(fakeAnalyticsService.trackedErrors).containsExactly( @@ -497,22 +520,22 @@ class CreatePollPresenterTest { newAnswer1: String? = null, newAnswer2: String? = null, ) = - awaitItem().apply { - assertThat(canSave).isTrue() - assertThat(canAddAnswer).isTrue() - assertThat(question).isEqualTo(newQuestion ?: existingPoll.question) - assertThat(answers).isEqualTo(existingPoll.expectedAnswersState().toMutableList().apply { + awaitItem().also { state -> + assertThat(state.canSave).isTrue() + assertThat(state.canAddAnswer).isTrue() + assertThat(state.question).isEqualTo(newQuestion ?: existingPoll.question) + assertThat(state.answers).isEqualTo(existingPoll.expectedAnswersState().toMutableList().apply { newAnswer1?.let { this[0] = Answer(it, true) } newAnswer2?.let { this[1] = Answer(it, true) } }) - assertThat(pollKind).isEqualTo(existingPoll.kind) + assertThat(state.pollKind).isEqualTo(existingPoll.kind) } private fun createCreatePollPresenter( mode: CreatePollMode = CreatePollMode.NewPoll, room: MatrixRoom = fakeMatrixRoom, ): CreatePollPresenter = CreatePollPresenter( - repository = PollRepository(room), + repository = PollRepository(room, LiveTimelineProvider(room)), analyticsService = fakeAnalyticsService, messageComposerContext = fakeMessageComposerContext, navigateUp = { navUpInvocationsCount++ }, diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt index c34c9074f0..9a4af79dd6 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt @@ -22,7 +22,7 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.poll.api.actions.EndPollAction import io.element.android.features.poll.api.actions.SendPollResponseAction -import io.element.android.features.poll.impl.aPollTimeline +import io.element.android.features.poll.impl.aPollTimelineItems import io.element.android.features.poll.impl.anEndedPollContent import io.element.android.features.poll.impl.anOngoingPollContent import io.element.android.features.poll.impl.history.model.PollHistoryFilter @@ -32,14 +32,20 @@ import io.element.android.features.poll.test.actions.FakeEndPollAction import io.element.android.features.poll.test.actions.FakeSendPollResponseAction import io.element.android.libraries.dateformatter.test.FakeDaySeparatorFormatter import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.AN_EVENT_ID_2 import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.room.FakeMatrixRoom +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.lambda.assert +import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest @@ -50,11 +56,14 @@ class PollHistoryPresenterTest { @get:Rule val warmUpRule = WarmUpRule() - private val timeline = aPollTimeline( - polls = mapOf( + private val backwardPaginationStatus = MutableStateFlow(Timeline.PaginationStatus(isPaginating = false, hasMoreToLoad = true)) + private val timeline = FakeTimeline( + timelineItems = aPollTimelineItems( + mapOf( AN_EVENT_ID to anOngoingPollContent(), AN_EVENT_ID_2 to anEndedPollContent() - ) + )), + backwardPaginationStatus = backwardPaginationStatus ) private val room = FakeMatrixRoom( liveTimeline = timeline @@ -66,7 +75,6 @@ class PollHistoryPresenterTest { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - skipItems(1) awaitItem().also { state -> assertThat(state.activeFilter).isEqualTo(PollHistoryFilter.ONGOING) assertThat(state.pollHistoryItems.size).isEqualTo(0) @@ -127,26 +135,30 @@ class PollHistoryPresenterTest { @Test fun `present - load more scenario`() = runTest { + val paginateLambda = lambdaRecorder{ _: Timeline.PaginationDirection -> + Result.success(false) + } + timeline.apply { + this.paginateLambda = paginateLambda + } val presenter = createPollHistoryPresenter(room = room) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - skipItems(2) - awaitItem().also { state -> - assertThat(state.pollHistoryItems.size).isEqualTo(2) - } - timeline.updatePaginationState { - copy(isBackPaginating = false) - } + skipItems(1) val loadedState = awaitItem() assertThat(loadedState.isLoading).isFalse() loadedState.eventSink(PollHistoryEvents.LoadMore) + backwardPaginationStatus.getAndUpdate { it.copy(isPaginating = true) } awaitItem().also { state -> assertThat(state.isLoading).isTrue() } + backwardPaginationStatus.getAndUpdate { it.copy(isPaginating = false) } awaitItem().also { state -> assertThat(state.isLoading).isFalse() } + // Called once by the initial load and once by the load more event + assert(paginateLambda).isCalledExactly(2) } } diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt index 49fa29ced3..af3f0aa820 100644 --- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt +++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt @@ -49,6 +49,7 @@ import io.element.android.libraries.indicator.impl.DefaultIndicatorService import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.preferences.impl.store.DefaultSessionPreferencesStore import io.element.android.libraries.push.test.notifications.FakeNotificationDrawerManager import io.element.android.services.analytics.noop.NoopAnalyticsService @@ -146,7 +147,7 @@ class RoomListScreen( Singleton.appScope.launch { withContext(coroutineDispatchers.io) { matrixClient.getRoom(roomId)!!.use { room -> - room.timeline.paginateBackwards(20, 50) + room.liveTimeline.paginate(Timeline.PaginationDirection.BACKWARDS) } } } diff --git a/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/lambda/LambdaRecorder.kt b/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/lambda/LambdaRecorder.kt index b7beaaa5e9..4e49560398 100644 --- a/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/lambda/LambdaRecorder.kt +++ b/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/lambda/LambdaRecorder.kt @@ -71,6 +71,13 @@ inline fun lambdaRec return LambdaFourParamsRecorder(ensureNeverCalled, block) } +inline fun lambdaRecorder( + ensureNeverCalled: Boolean = false, + noinline block: (T1, T2, T3, T4, T5) -> R +): LambdaFiveParamsRecorder { + return LambdaFiveParamsRecorder(ensureNeverCalled, block) +} + class LambdaNoParamRecorder(ensureNeverCalled: Boolean, val block: () -> R) : LambdaRecorder(ensureNeverCalled), () -> R { override fun invoke(): R { onInvoke() @@ -109,3 +116,12 @@ class LambdaFourParamsRecorder(ensureNeverCal return block(p1, p2, p3, p4) } } + +class LambdaFiveParamsRecorder(ensureNeverCalled: Boolean, val block: (T1, T2, T3, T4, T5) -> R) : LambdaRecorder( + ensureNeverCalled +), (T1, T2, T3, T4, T5) -> R { + override fun invoke(p1: T1, p2: T2, p3: T3, p4: T4, p5: T5): R { + onInvoke(p1, p2, p3, p4, p5) + return block(p1, p2, p3, p4, p5) + } +} From 0e007006443b784893ddd35010a7d4d7b6d20ad3 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Thu, 25 Apr 2024 10:49:05 +0000 Subject: [PATCH 160/289] Update screenshots --- ...mView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,en].png | 3 +++ ...mView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_8,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_JoinRoomView-Night-0_2_null_9,NEXUS_5,1.0,en].png | 3 +++ ...NotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...NotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...NotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...NotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...NotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...ificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...ificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...ificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...ificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...ificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,en].png} | 0 ...nfirmRecoveryKeyBanner-Night-2_4_null,NEXUS_5,1.0,en].png} | 0 ...mListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,en].png} | 0 ...istTopBarWithIndicator-Night-5_7_null,NEXUS_5,1.0,en].png} | 0 ...ll_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,en].png} | 0 ..._DefaultRoomListTopBar-Night-4_6_null,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListContentView-Day-3_4_null_2,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,en].png} | 0 ..._RoomListContentView-Night-3_5_null_0,NEXUS_5,1.0,en].png} | 0 ..._RoomListContentView-Night-3_5_null_1,NEXUS_5,1.0,en].png} | 0 ..._RoomListContentView-Night-3_5_null_2,NEXUS_5,1.0,en].png} | 0 ..._RoomListContentView-Night-3_5_null_3,NEXUS_5,1.0,en].png} | 0 ..._RoomListContentView-Night-3_5_null_4,NEXUS_5,1.0,en].png} | 0 ...oomSummaryPlaceholderRow-Day-6_7_null,NEXUS_5,1.0,en].png} | 0 ...mSummaryPlaceholderRow-Night-6_8_null,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_0,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_1,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_10,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_11,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_12,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_13,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_14,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_15,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_16,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_17,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_18,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_19,NEXUS_5,1.0,en].png} | 0 ...Row_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,en].png | 3 +++ ...w_null_RoomSummaryRow-Day-7_8_null_20,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_21,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_22,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_23,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_24,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_25,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_26,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_27,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_28,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_3,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,en].png | 3 +++ ...ow_null_RoomSummaryRow-Day-7_8_null_4,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_5,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_6,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_7,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_8,NEXUS_5,1.0,en].png} | 0 ...ow_null_RoomSummaryRow-Day-7_8_null_9,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_0,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_1,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_10,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_11,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_12,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_13,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_14,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_15,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_16,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_17,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_18,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_19,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomSummaryRow-Night-7_9_null_2,NEXUS_5,1.0,en].png | 3 +++ ...null_RoomSummaryRow-Night-7_9_null_20,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_21,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_22,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_23,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_24,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_25,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_26,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_27,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_28,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_29,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_3,NEXUS_5,1.0,en].png} | 0 ...null_RoomSummaryRow-Night-7_9_null_30,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_31,NEXUS_5,1.0,en].png | 3 +++ ..._null_RoomSummaryRow-Night-7_9_null_4,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_5,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_6,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_7,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_8,NEXUS_5,1.0,en].png} | 0 ..._null_RoomSummaryRow-Night-7_9_null_9,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,en].png} | 0 ...ll_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,en].png} | 0 ...RoomListFiltersView-Night-8_10_null_0,NEXUS_5,1.0,en].png} | 0 ...RoomListFiltersView-Night-8_10_null_1,NEXUS_5,1.0,en].png} | 0 ...ull_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,en].png} | 0 ...l_MigrationScreenView-Night-9_11_null,NEXUS_5,1.0,en].png} | 0 ...oomListSearchContent-Day-10_11_null_0,NEXUS_5,1.0,en].png} | 0 ...oomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,en].png} | 0 ...oomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,en].png} | 0 ...mListSearchContent-Night-10_12_null_0,NEXUS_5,1.0,en].png} | 0 ...mListSearchContent-Night-10_12_null_1,NEXUS_5,1.0,en].png} | 0 ...mListSearchContent-Night-10_12_null_2,NEXUS_5,1.0,en].png} | 0 ...odalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,en].png} | 0 ...odalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,en].png} | 0 ...ModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,en].png | 3 +++ ...alBottomSheetContent-Night-0_2_null_0,NEXUS_5,1.0,en].png} | 0 ...alBottomSheetContent-Night-0_2_null_1,NEXUS_5,1.0,en].png} | 0 ...dalBottomSheetContent-Night-0_2_null_2,NEXUS_5,1.0,en].png | 3 +++ ...View_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png} | 0 ...iew_null_RoomListView-Day-1_2_null_10,NEXUS_5,1.0,en].png} | 0 ...iew_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png} | 0 ...tView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,en].png | 3 +++ ...View_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Day-1_2_null_8,NEXUS_5,1.0,en].png} | 0 ...View_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomListView-Night-1_3_null_10,NEXUS_5,1.0,en].png} | 0 ...w_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png} | 0 ...iew_null_RoomListView-Night-1_3_null_3,NEXUS_5,1.0,en].png | 3 +++ ...ew_null_RoomListView-Night-1_3_null_4,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomListView-Night-1_3_null_5,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomListView-Night-1_3_null_7,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomListView-Night-1_3_null_8,NEXUS_5,1.0,en].png} | 0 ...ew_null_RoomListView-Night-1_3_null_9,NEXUS_5,1.0,en].png} | 0 ...Room_null_SelectedRoom-Day-6_7_null_0,NEXUS_5,1.0,en].png} | 0 ...dRoom_null_SelectedRoom-Day-6_7_null_1,NEXUS_5,1.0,en].png | 3 +++ ...om_null_SelectedRoom-Night-6_8_null_0,NEXUS_5,1.0,en].png} | 0 ...oom_null_SelectedRoom-Night-6_8_null_1,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en].png | 4 ++-- 162 files changed, 102 insertions(+), 60 deletions(-) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_8,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_9,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-2_4_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-5_7_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-4_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-6_7_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-6_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_15,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_16,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_17,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_18,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_19,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_20,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_21,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_22,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_23,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_24,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_25,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_26,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_27,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_28,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_15,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_16,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_17,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_18,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_19,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_2,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_20,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_21,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_22,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_23,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_24,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_25,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_26,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_27,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_28,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_29,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_30,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_31,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-9_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_1,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_2,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_3,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_0,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_1,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_0,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png index 01d0114013..fbd9176f68 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7c1c180f53b948992d1f14d9635bcfee13fad55e772c9d74af62a747928a540 -size 143814 +oid sha256:b170e67502c4df969aa1c0f442871440a39dbc63cdcac04906f297b33ae3c70b +size 142579 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png index 483a0e615c..13f48ef58e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1dc731d4a0c2aeb383035b3781f1e319fe34445e83324458e997df22a3d09bdc -size 145241 +oid sha256:90e0e2a860d813f804b6888bdf5aa52982b9edf40cff2c8611ace953fa20791e +size 133263 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png index b209283185..80928fa448 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2678e82f1e260b67ebbca47b41a0283d89bbc1799905c32f4e90821d7f41ce6c -size 148232 +oid sha256:9bc75857481156b0d924badae1aad0dcbb20d9c0f1b36862af3cf8634aca2c11 +size 144750 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png index f9433453ec..66e9a2f579 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3da95310c379b64cece500e9a942170f227dfe4c9d856690d2343ae9aaf47dc5 -size 144682 +oid sha256:2a0db543ffe82db423c02a1e59533bb1f6fe867e23e7d37e70166c210da422a7 +size 148258 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png index db53b3b31d..8d8788139b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2128dda46d28adeabcd77ae254b98e5305c48cfc4578b53bd4b91c222a129e39 -size 151787 +oid sha256:33aefc9b980615602194c93a6b9bca8c912c1efc1eb657928be0f9d8ad2477f6 +size 144236 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png index c1f86c1efd..94cdffd307 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0134f458078bde571001caea88804e35e50dc89c4975bf4c7b86582662e63b08 -size 125696 +oid sha256:cc95feba2fa1d4decbffaee11c5c1ad8ae9fc61b2907644a54266d8276a8f795 +size 151644 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png index f5bbcd0456..1b34f4e22b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1eae5de422832fbe03a5ba5ed8281492c2bd4ad926330fac4759bec4b31943a8 -size 130094 +oid sha256:6adf0fd24544aed67ae9f5bcd44520921951cb8d410bfb3229e8a1c87181d6eb +size 123329 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..1d9407df2f --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f990df4098bc1dd692e2e12c8428a6f70824d132d89dcb5c902ef61be80c5409 +size 127731 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..16bd49fdfe --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43eb037000b7eea608910ed802921ea847c8869a4eb2b1e66b6f129fd78957b7 +size 144223 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png index 98c6e9f858..1a4a195109 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7a49f72bcf030670dd014469cf906a7097c07d6fad17149edee92f128ab2dc6 -size 125866 +oid sha256:d6ef4222ce4ea18c98bc32b83ed974eae60ba3c7d5f387fda1e8b6fc0e307bae +size 124596 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png index f0e6548310..b39c457f18 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c134bdb3e372eeaedc3669aaf92486cbb253fcf41b0023c03743bf7e61c72456 -size 129893 +oid sha256:94ec2d5b5e55ff77effec46ed8f7bfc70f35c4e724a775f50bdec188380ba328 +size 116308 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png index 8e5203848d..c44f0312f2 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2af528ba157c4eb2f779e50dd3b95d190c0c68aaa96899ebfa7bc9c843469b00 -size 131811 +oid sha256:26231bb9079c91813982dd25b399d1f94c9510908be28197e8c76959382368ed +size 129494 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png index 937c1ce423..c4cc8121c2 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:124a10348cdf9e3e5aba4bbc89c93a1af30e38f58f3e44b2255e705abe5c0c8c -size 127801 +oid sha256:ddb24be2f1f934d7e472ccdda65aa0fab68f0e0e7e140f51c9fb4bf971c77601 +size 131881 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png index 1ed50b5f83..6a8a4b9075 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae55c1be7450df7cfd40ae931af2a59b9fe8adbde79e83a3cf395a435a7b534f -size 135115 +oid sha256:de4c3c96a9722e51af82d2a4291abc346c9d19ff9679e62c958613f09f86eb8a +size 127405 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png index e352099a7e..2b470bbb75 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23826df8b3dde24c1592bf2b9160ffb3995cee09e3e704789ec9fa8bbaa42db2 -size 109429 +oid sha256:80a7954bf21c4d4be62d88d0bb53bd7266b9edb499312136a41ee96ce0ec4936 +size 134910 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png index c31183bd3e..61289fd716 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22ba97c9a23956b7e3d4a721a34e6c0577c28acf2a7b8a1f58e31298d05b5085 -size 113466 +oid sha256:da99de442338fd55d9c747d5823db696fb50984045e0d342ad17b0142b7d0d1c +size 107253 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_8,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..33c3986cb1 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_8,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be0ec4397b7f67c293c2be11abbcf8a8b2733e4f3fd675518bb89a7b59f03ba0 +size 111245 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_9,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..9b097652c4 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_9,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:742a0e0b5cbb9f2ed8aebabfd1893ff1cef993998db76a48994cc4e594195a0c +size 128311 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en].png index 63535c6ed7..b36f9fdbf9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4250ac2157e6b46695cfe3c7518a908a9dcb052153d9ba1a881595a8fe0fe666 -size 35911 +oid sha256:7c60bb30db63393c46e8935d45c642b53dd6d407c92bcfd7f55bff135abe26ed +size 45064 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en].png index da4af764ae..92010ad6b4 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fddd21bba9b8b802b151a40c7bd01e9f83cc76bd7c5c942d0a0cf9772545fc91 -size 35835 +oid sha256:ed85c6af5d6fe30c34c2d840160a88ffd93e3bd9abca4894d44c1be702de1495 +size 44988 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en].png index c3d18565f8..4b8388d9cc 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:045ea8d491711eedee7af50e1728504bd03cfd728054c7ef3fb7bc2a68bc1814 -size 32322 +oid sha256:45e65e5da30433c49a14f5929ec0158e6bb11098d3113e1144d8b041ef165be7 +size 40254 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en].png index aee8c3f383..9eb7c0aa16 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c963fd6aedf394d4825d0f3ffdf21ca9a1c285f97b945919038cea519f6737b2 -size 36865 +oid sha256:fd69ffb1407d575296a6050a36378f4be9b98ff17000f7f3e692f6e4878362ea +size 37534 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en].png index 44ee0d467e..9e93827a14 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5aef9d7eff69ca1af87515bb857c8efe555d6aa338db0dfec2264a18a391d7b9 -size 50273 +oid sha256:642c92c883ebb0d26d17c124ca21e52fb6a879ed34a6b9827631dfa9df9d07a8 +size 59439 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en].png index 847a6c1430..13ed988bbc 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5882a8ae82592b3bc881790e83ef30c0dec990ee6856389feafd2d16221f721 -size 33119 +oid sha256:d330b43bedc202a0d306bff27aa69bb242ed0284d49242c393a499e1f91c2dff +size 42079 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en].png index f99357ab79..d2331e1b6f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7968e77fa33e689cb6ffb5e8d80c7f246776b5f93bef67d68a19187b006d8cd -size 33067 +oid sha256:f2c190fa02e3841fa8c7113a2d9ea79f4cce7063ad77b03115a2e417d7cae610 +size 42031 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en].png index 03c9444d46..8f1d42f36a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7c77372ed27fa07f8e43d55e865738db36c79e55ba257e4b16edcc15a0e5baf -size 29040 +oid sha256:ce1f077a5b3db7bebde1abdec0226eaed7edd82fdd70b7f4240a0ac0b8316373 +size 36911 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en].png index 46b2ebcf5a..eb6b46bd06 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc8ed93a4d8a38d4deca4f8534aae2278a7c3e74586b59bc71b1ca1bb76b565c -size 32313 +oid sha256:e579b56faf3a62f4fa50ff218c564e0c8052f36a4af42a187b8313cb0a8b3e54 +size 33004 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en].png index bd10f9c1ef..22914b5d39 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eaa1454848a2e5c5ad80600c5ed13791ccd277a76a43d8c0045ac5e3bfa8fa85 -size 47447 +oid sha256:8d2b9344262412f3f546d97faaf2983601b661346ce95471bb6f2e391f051f48 +size 55594 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-2_4_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-2_4_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-5_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-5_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-4_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-4_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-6_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-6_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-6_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-6_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_15,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_15,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_16,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_16,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_17,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_17,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_18,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_18,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_19,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_19,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..1056e9b9ee --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee7a5cc40711acc588914db928fdcf9e3f426c923507efc86350061afa491fc0 +size 14203 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_20,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_20,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_21,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_21,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_22,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_22,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_23,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_23,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_24,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_24,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_25,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_25,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_26,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_26,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_27,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_27,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_28,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_28,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e6db98cde3 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f36db2ac3722352943a2b9afd24faf2a364c7804c92a1d1782414c5cb816cfe +size 23014 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_15,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_15,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_16,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_16,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_17,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_17,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_18,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_18,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_19,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_19,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..21358b8a0c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b3fedf1a26a0dd8ba8b2e7bbe124e767af5659e19c0bb341bb0cad43b99da5b +size 13951 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_20,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_20,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_21,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_21,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_22,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_22,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_23,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_23,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_24,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_24,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_25,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_25,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_26,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_26,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_27,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_27,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_28,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_28,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_29,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_29,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_30,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_30,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_31,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_31,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..cbab124426 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_31,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b458bf8708fc342b34911eaa60fc13a07665da608e0dd4c138e7b600876d42dc +size 22225 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-9_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-9_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..57af8a0aeb --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58d2879edc2992e065d0dd54a7cb31d98f71e48a8054ed96ebcb4a99c58369dd +size 22094 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..19daeaf150 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76e836e04f7e90c09d89a52cb02aadc0100fdbf3f40d946275341a106b6aeca0 +size 20727 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..7f7feab129 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5224fbc3408e3a1526e77fbd2a219fbaa4fe488c3ada52de0c88d9612a3cbf47 +size 24106 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..a6d7a822d1 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce85585e5fee1ab1d9e481ba2698261990ea2a72c70e13ee67a6f5260208323c +size 21336 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..729534f353 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e39b6334c6949ea6f229aa8da0b46f6860ae6c298950f0db8f1b052227bd1b3d +size 8062 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..bf2ca7608b --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94034b245f24d6b5290fd5f1c1e46ae474218cc8345a6b8c51f53e2afcaa5f3f +size 8359 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en].png index 2759a23f60..b345023575 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aae116658dd22520a252376d56154ff3f024a0c840c07cf319948a243cc45091 -size 26653 +oid sha256:2620ab01309f136b06cbeb5b306dd4b99c87962aa980b632e006c964c8308a7d +size 32714 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en].png index b1579752be..571f3d08c1 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9cde0708d4ce0c57a064633772067f8e0904ce8af08fbfad21f86cbe45ed9c64 -size 24815 +oid sha256:b5702240d4eebd8ca615b90878d32cf9ea5f23de5fe37031b41fc6d0719eed59 +size 30746 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en].png index 16eca2d2f3..f3ded167b1 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:910e88868f8ae38bf09a86c19a43780ec6485ecf7b3b7c9c6ddcf210bac6433d -size 29379 +oid sha256:67d462927025ca2d0d50a7ee1b36b5687e80bdb50c6f53f49499520e4998a1da +size 35220 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en].png index ae3c3d92ce..f6572dc2b8 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d745adafa23361067abd1a1ebccf02d82058c1880ba3a8280697449fbc8cf76 -size 25400 +oid sha256:2186b3f0bac395ff7008c81980d434a61b5f162047195faa2a8516bfde5bb0c7 +size 30842 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en].png index 8efae5a28e..8a5a7a0173 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5208bb6c36305765c83775d580fe351b9242846d0bf9d0d19d78157bdfe16bc -size 23763 +oid sha256:2cd684e70c3486ac48f621b4d3af18d4cd88296ec8222dac273968c6b5faa4cc +size 29004 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en].png index b0b28b377f..e0bfec8758 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:968c3200f9e0d34e373d33f8112c0297c0a3a344f0f784cee3aa68c476b5e2de -size 27456 +oid sha256:11a336f8889c75e00c1077f07ecb99e4af06f54c93f8948b48a892dd87e0ebee +size 33070 From 97b9d75a0df5c06e706eb4c5bc99f6b049bd5d48 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 25 Apr 2024 14:35:37 +0200 Subject: [PATCH 161/289] Timeline : makes sure all tests are passing --- .../impl/forward/ForwardMessagesPresenter.kt | 1 + .../impl/timeline/TimelineController.kt | 32 +++++++++++++------ .../messages/impl/timeline/TimelineState.kt | 4 ++- .../messages/impl/timeline/TimelineView.kt | 20 +++++------- .../forward/ForwardMessagesPresenterTests.kt | 32 +++++++++++++++---- .../features/poll/impl/data/PollRepository.kt | 1 + .../poll/impl/history/PollHistoryPresenter.kt | 7 ++-- .../impl/history/PollHistoryPresenterTest.kt | 3 +- .../matrix/api/timeline/TimelineProvider.kt | 11 +++++-- .../HasEncryptionHistoryBanner.kt | 2 +- .../RoomBeginningPostProcessor.kt | 15 ++++++--- ...t.kt => RoomBeginningPostProcessorTest.kt} | 29 ++++++++++++----- 12 files changed, 108 insertions(+), 49 deletions(-) rename libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/{DmBeginningTimelineProcessorTest.kt => RoomBeginningPostProcessorTest.kt} (86%) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt index fd26109e0a..a2212b69f3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt @@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.TimelineProvider +import io.element.android.libraries.matrix.api.timeline.getActiveTimeline import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index ce6bdfc7d3..c4d794b7c4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -22,17 +22,22 @@ import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider -import io.element.android.libraries.matrix.api.timeline.TimelineProvider import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.matrix.api.timeline.TimelineProvider +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn import java.io.Closeable import java.util.Optional import javax.inject.Inject @@ -49,12 +54,14 @@ class TimelineController @Inject constructor( private val room: MatrixRoom, ) : Closeable, TimelineProvider { + private val coroutineScope = CoroutineScope(SupervisorJob()) + private val liveTimeline = MutableStateFlow(room.liveTimeline) private val detachedTimeline = MutableStateFlow>(Optional.empty()) @OptIn(ExperimentalCoroutinesApi::class) fun timelineItems(): Flow> { - return currentTimelineFlow().flatMapLatest { it.timelineItems } + return currentTimelineFlow.flatMapLatest { it.timelineItems } } fun isLive(): Flow { @@ -62,7 +69,7 @@ class TimelineController @Inject constructor( } suspend fun invokeOnCurrentTimeline(block: suspend (Timeline.() -> Any)) { - currentTimelineFlow().first().run { + currentTimelineFlow.value.run { block(this) } } @@ -89,6 +96,10 @@ class TimelineController @Inject constructor( * This does close the detached timeline if any. */ fun focusOnLive() { + closeDetachedTimeline() + } + + private fun closeDetachedTimeline() { detachedTimeline.getAndUpdate { when { it.isPresent -> { @@ -101,11 +112,12 @@ class TimelineController @Inject constructor( } override fun close() { - focusOnLive() + coroutineScope.cancel() + closeDetachedTimeline() } suspend fun paginate(direction: Timeline.PaginationDirection): Result { - return currentTimelineFlow().first().paginate(direction) + return currentTimelineFlow.value.paginate(direction) .onSuccess { hasReachedEnd -> if (direction == Timeline.PaginationDirection.FORWARDS && hasReachedEnd) { focusOnLive() @@ -113,14 +125,14 @@ class TimelineController @Inject constructor( } } - private fun currentTimelineFlow() = combine(liveTimeline, detachedTimeline) { live, detached -> + private val currentTimelineFlow = combine(liveTimeline, detachedTimeline) { live, detached -> when { detached.isPresent -> detached.get() else -> live } - } + }.stateIn(coroutineScope, SharingStarted.Eagerly, room.liveTimeline) - override suspend fun getActiveTimeline(): Timeline { - return currentTimelineFlow().first() + override fun activeTimelineFlow(): StateFlow { + return currentTimelineFlow } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt index 7fb6c1ffdc..726870a5b7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt @@ -32,7 +32,9 @@ data class TimelineState( val focusedEventId : EventId?, val focusRequestState: FocusRequestState, val eventSink: (TimelineEvents) -> Unit, -) +){ + val isTimelineEmpty = timelineItems.none { it is TimelineItem.Event } +} sealed interface FocusRequestState { data object None : FocusRequestState diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index f15a0807cd..1e1c04a677 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -63,6 +63,7 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContentProvider import io.element.android.features.messages.impl.typing.TypingNotificationState +import io.element.android.features.messages.impl.typing.TypingNotificationView import io.element.android.features.messages.impl.typing.aTypingNotificationState import io.element.android.libraries.designsystem.components.ProgressDialog import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog @@ -125,12 +126,12 @@ fun TimelineView( reverseLayout = useReverseLayout, contentPadding = PaddingValues(vertical = 8.dp), ) { - /* - item(key = UUID.randomUUID()) { - TypingNotificationView(state = typingNotificationState) - } - */ + if(state.isLive) { + item { + TypingNotificationView(state = typingNotificationState) + } + } items( items = state.timelineItems, contentType = { timelineItem -> timelineItem.contentType() }, @@ -165,7 +166,7 @@ fun TimelineView( ) TimelineScrollHelper( - isTimelineEmpty = state.timelineItems.isEmpty(), + isTimelineEmpty = state.isTimelineEmpty, lazyListState = lazyListState, forceJumpToBottomVisibility = forceJumpToBottomVisibility, newEventState = state.newEventState, @@ -185,10 +186,6 @@ private fun FocusRequestStateView( onClearFocusRequestState: () -> Unit, modifier: Modifier = Modifier, ) { - BackHandler(enabled = focusRequestState is FocusRequestState.Fetching) { - onClearFocusRequestState() - } - when (focusRequestState) { is FocusRequestState.Failure -> { ErrorDialog( @@ -198,7 +195,7 @@ private fun FocusRequestStateView( ) } FocusRequestState.Fetching -> { - ProgressDialog(modifier = modifier) + ProgressDialog(modifier = modifier, onDismissRequest = onClearFocusRequestState) } is FocusRequestState.Cached, FocusRequestState.None -> Unit } @@ -254,7 +251,6 @@ private fun BoxScope.TimelineScrollHelper( } LaunchedEffect(canAutoScroll, newEventState) { - Timber.d("TimelineScrollHelper - canAutoScroll: $canAutoScroll, newEventState: $newEventState") val shouldScrollToBottom = isScrollFinished && (canAutoScroll || newEventState == NewEventState.FromMe) if (shouldScrollToBottom) { scrollToBottom() diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt index d1b054faf8..f6c749ea32 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt @@ -21,15 +21,20 @@ import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.aRoomSummaryDetails +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.lambda.assert +import io.element.android.tests.testutils.lambda.lambdaRecorder import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test +import java.lang.IllegalStateException class ForwardMessagesPresenterTests { @get:Rule @@ -37,7 +42,7 @@ class ForwardMessagesPresenterTests { @Test fun `present - initial state`() = runTest { - val presenter = aPresenter() + val presenter = aForwardMessagesPresenter() moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -50,7 +55,14 @@ class ForwardMessagesPresenterTests { @Test fun `present - forward successful`() = runTest { - val presenter = aPresenter() + val forwardEventLambda = lambdaRecorder { _: EventId, _: List -> + Result.success(Unit) + } + val timeline = FakeTimeline().apply { + this.forwardEventLambda = forwardEventLambda + } + val room = FakeMatrixRoom(liveTimeline = timeline) + val presenter = aForwardMessagesPresenter(fakeMatrixRoom = room) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -62,18 +74,23 @@ class ForwardMessagesPresenterTests { val successfulForwardState = awaitItem() assertThat(successfulForwardState.isForwarding).isFalse() assertThat(successfulForwardState.forwardingSucceeded).isNotNull() + assert(forwardEventLambda).isCalledOnce() } } @Test fun `present - select a room and forward failed, then clear`() = runTest { - val room = FakeMatrixRoom() - val presenter = aPresenter(fakeMatrixRoom = room) + val forwardEventLambda = lambdaRecorder { _: EventId, _: List -> + Result.failure(IllegalStateException("error")) + } + val timeline = FakeTimeline().apply { + this.forwardEventLambda = forwardEventLambda + } + val room = FakeMatrixRoom(liveTimeline = timeline) + val presenter = aForwardMessagesPresenter(fakeMatrixRoom = room) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - // Test failed forwarding - room.givenForwardEventResult(Result.failure(Throwable("error"))) skipItems(1) val summary = aRoomSummaryDetails() presenter.onRoomSelected(listOf(summary.roomId)) @@ -83,10 +100,11 @@ class ForwardMessagesPresenterTests { // Then clear error failedForwardState.eventSink(ForwardMessagesEvents.ClearError) assertThat(awaitItem().error).isNull() + assert(forwardEventLambda).isCalledOnce() } } - private fun CoroutineScope.aPresenter( + private fun CoroutineScope.aForwardMessagesPresenter( eventId: EventId = AN_EVENT_ID, fakeMatrixRoom: FakeMatrixRoom = FakeMatrixRoom(), coroutineScope: CoroutineScope = this, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt index 55d2bd8099..e8d2506408 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt @@ -21,6 +21,7 @@ import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.TimelineProvider +import io.element.android.libraries.matrix.api.timeline.getActiveTimeline import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import kotlinx.coroutines.flow.first import javax.inject.Inject diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt index b36359aa25..7a3b3f8232 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt @@ -34,22 +34,23 @@ import io.element.android.features.poll.impl.history.model.PollHistoryItemsFacto import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.matrix.api.timeline.TimelineProvider import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.flatMapConcat import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import javax.inject.Inject class PollHistoryPresenter @Inject constructor( - private val room: MatrixRoom, private val appCoroutineScope: CoroutineScope, private val sendPollResponseAction: SendPollResponseAction, private val endPollAction: EndPollAction, private val pollHistoryItemFactory: PollHistoryItemsFactory, + private val timelineProvider: TimelineProvider, ) : Presenter { @Composable override fun present(): PollHistoryState { - // TODO use room.rememberPollHistory() when working properly? - val timeline = room.liveTimeline + val timeline by timelineProvider.activeTimelineFlow().collectAsState() val paginationState by timeline.paginationStatus(Timeline.PaginationDirection.BACKWARDS).collectAsState() val pollHistoryItemsFlow = remember { timeline.timelineItems.map { items -> diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt index 9a4af79dd6..07f71f51d3 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt @@ -32,6 +32,7 @@ import io.element.android.features.poll.test.actions.FakeEndPollAction import io.element.android.features.poll.test.actions.FakeSendPollResponseAction import io.element.android.libraries.dateformatter.test.FakeDaySeparatorFormatter import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.AN_EVENT_ID_2 @@ -174,11 +175,11 @@ class PollHistoryPresenterTest { ), ): PollHistoryPresenter { return PollHistoryPresenter( - room = room, appCoroutineScope = appCoroutineScope, sendPollResponseAction = sendPollResponseAction, endPollAction = endPollAction, pollHistoryItemFactory = pollHistoryItemFactory, + timelineProvider = LiveTimelineProvider(room), ) } } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt index 242859fede..5b55b8dc47 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt @@ -19,6 +19,11 @@ package io.element.android.libraries.matrix.api.timeline import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.room.MatrixRoom +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flowOf import javax.inject.Inject /** @@ -26,9 +31,11 @@ import javax.inject.Inject * It could be the current room timeline, or a timeline for a specific event. */ interface TimelineProvider { - suspend fun getActiveTimeline(): Timeline + fun activeTimelineFlow(): StateFlow } +suspend fun TimelineProvider.getActiveTimeline(): Timeline = activeTimelineFlow().first() + /** * Default implementation of [TimelineProvider] that provides the live timeline of a room. */ @@ -36,6 +43,6 @@ interface TimelineProvider { class LiveTimelineProvider @Inject constructor( private val room: MatrixRoom, ) : TimelineProvider { - override suspend fun getActiveTimeline(): Timeline = room.liveTimeline + override fun activeTimelineFlow(): StateFlow = MutableStateFlow(room.liveTimeline) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt index 882d89bbee..2d6801918e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/HasEncryptionHistoryBanner.kt @@ -19,7 +19,7 @@ package io.element.android.libraries.matrix.impl.timeline.postprocessor import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem -fun List.hasEncryptionHistoryBanner(): Boolean { +internal fun List.hasEncryptionHistoryBanner(): Boolean { val firstItem = firstOrNull() return firstItem is MatrixTimelineItem.Virtual && firstItem.virtual is VirtualTimelineItem.EncryptedHistoryBanner diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt index fed2266659..da8392a452 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.impl.timeline.postprocessor +import androidx.annotation.VisibleForTesting import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange import io.element.android.libraries.matrix.api.timeline.item.event.OtherState @@ -43,10 +44,7 @@ class RoomBeginningPostProcessor { private fun processForRoom(items: List): List { if (items.hasEncryptionHistoryBanner()) return items - val roomBeginningItem = MatrixTimelineItem.Virtual( - uniqueId = VirtualTimelineItem.RoomBeginning.toString(), - virtual = VirtualTimelineItem.RoomBeginning - ) + val roomBeginningItem = createRoomBeginningItem() return listOf(roomBeginningItem) + items } @@ -77,4 +75,13 @@ class RoomBeginningPostProcessor { } return newItems } + + @VisibleForTesting + fun createRoomBeginningItem(): MatrixTimelineItem.Virtual { + return MatrixTimelineItem.Virtual( + uniqueId = VirtualTimelineItem.RoomBeginning.toString(), + virtual = VirtualTimelineItem.RoomBeginning + ) + } + } diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessorTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessorTest.kt similarity index 86% rename from libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessorTest.kt rename to libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessorTest.kt index 40a15f7621..2c72481a25 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/DmBeginningTimelineProcessorTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessorTest.kt @@ -22,13 +22,14 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MembershipCha import io.element.android.libraries.matrix.api.timeline.item.event.OtherState import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent import io.element.android.libraries.matrix.api.timeline.item.event.StateContent +import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_ID_2 import io.element.android.libraries.matrix.test.timeline.aMessageContent import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem import org.junit.Test -class DmBeginningTimelineProcessorTest { +class RoomBeginningPostProcessorTest { @Test fun `processor removes room creation event and self-join event from DM timeline`() { val timelineItems = listOf( @@ -36,7 +37,7 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, MembershipChange.JOINED))), ) val processor = RoomBeginningPostProcessor() - val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = true) + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = false) assertThat(processedItems).isEmpty() } @@ -53,18 +54,30 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.message", anEventTimelineItem(content = aMessageContent("hi"))), ) val processor = RoomBeginningPostProcessor() - val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = true) + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = false) assertThat(processedItems).isEqualTo(expected) } @Test - fun `processor won't remove items if it's not a DM`() { + fun `processor will add beginning of room item if it's not a DM`() { val timelineItems = listOf( MatrixTimelineItem.Event("m.room.create", anEventTimelineItem(sender = A_USER_ID, content = StateContent("", OtherState.RoomCreate))), MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, MembershipChange.JOINED))), ) val processor = RoomBeginningPostProcessor() - val processedItems = processor.process(timelineItems, isDm = false, hasMoreToLoadBackwards = true) + val processedItems = processor.process(timelineItems, isDm = false, hasMoreToLoadBackwards = false) + assertThat(processedItems).isEqualTo( + listOf(processor.createRoomBeginningItem()) + timelineItems + ) + } + + @Test + fun `processor will not add beginning of room item if it's not a DM and EncryptedHistoryBanner item is found`() { + val timelineItems = listOf( + MatrixTimelineItem.Virtual("EncryptedHistoryBanner", VirtualTimelineItem.EncryptedHistoryBanner), + ) + val processor = RoomBeginningPostProcessor() + val processedItems = processor.process(timelineItems, isDm = false, hasMoreToLoadBackwards = false) assertThat(processedItems).isEqualTo(timelineItems) } @@ -75,7 +88,7 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, MembershipChange.JOINED))), ) val processor = RoomBeginningPostProcessor() - val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = false) + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = true) assertThat(processedItems).isEqualTo(timelineItems) } @@ -85,7 +98,7 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, MembershipChange.JOINED))), ) val processor = RoomBeginningPostProcessor() - val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = false) + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = true) assertThat(processedItems).isEqualTo(timelineItems) } @@ -96,7 +109,7 @@ class DmBeginningTimelineProcessorTest { MatrixTimelineItem.Event("m.room.member", anEventTimelineItem(content = RoomMembershipContent(A_USER_ID_2, MembershipChange.JOINED))), ) val processor = RoomBeginningPostProcessor() - val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = false) + val processedItems = processor.process(timelineItems, isDm = true, hasMoreToLoadBackwards = true) assertThat(processedItems).isEqualTo(timelineItems) } } From 0e98659cc97412565b87298adeafc5beb9ba2490 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 25 Apr 2024 15:01:18 +0200 Subject: [PATCH 162/289] Timeline : do not cancel pagination to avoid stuck timeline. --- .../libraries/matrix/impl/timeline/RustTimeline.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 43c53dcf0d..1e572d925d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -54,6 +54,7 @@ import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.Flow @@ -173,9 +174,10 @@ class RustTimeline( } } - override suspend fun paginate(direction: Timeline.PaginationDirection): Result { + // Use NonCancellable to avoid breaking the timeline when the coroutine is cancelled. + override suspend fun paginate(direction: Timeline.PaginationDirection): Result = withContext(NonCancellable) { initLatch.await() - return runCatching { + runCatching { if (!canPaginate(direction)) throw TimelineException.CannotPaginate updatePaginationStatus(direction) { it.copy(isPaginating = true) } when (direction) { @@ -184,9 +186,6 @@ class RustTimeline( } }.onFailure { error -> updatePaginationStatus(direction) { it.copy(isPaginating = false) } - if (error is CancellationException) { - throw error - } if (error is TimelineException.CannotPaginate) { Timber.d("Can't paginate $direction on room ${matrixRoom.roomId} with paginationStatus: ${backPaginationStatus.value}") } else { From 6632b2a9988068e1a74a9f4cfa9d559da0c63cda Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 25 Apr 2024 15:13:19 +0200 Subject: [PATCH 163/289] Timeline : rename isTimelineEmpty to hasAnyEvent --- .../features/messages/impl/timeline/TimelineState.kt | 2 +- .../features/messages/impl/timeline/TimelineView.kt | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt index 726870a5b7..4a345af90c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt @@ -33,7 +33,7 @@ data class TimelineState( val focusRequestState: FocusRequestState, val eventSink: (TimelineEvents) -> Unit, ){ - val isTimelineEmpty = timelineItems.none { it is TimelineItem.Event } + val hasAnyEvent = timelineItems.any { it is TimelineItem.Event } } sealed interface FocusRequestState { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 1e1c04a677..db7b89833b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -19,7 +19,6 @@ package io.element.android.features.messages.impl.timeline import android.view.accessibility.AccessibilityManager -import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.tween @@ -75,7 +74,6 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.launch -import timber.log.Timber import kotlin.math.abs @Composable @@ -166,7 +164,7 @@ fun TimelineView( ) TimelineScrollHelper( - isTimelineEmpty = state.isTimelineEmpty, + hasAnyEvent = state.hasAnyEvent, lazyListState = lazyListState, forceJumpToBottomVisibility = forceJumpToBottomVisibility, newEventState = state.newEventState, @@ -203,7 +201,7 @@ private fun FocusRequestStateView( @Composable private fun BoxScope.TimelineScrollHelper( - isTimelineEmpty: Boolean, + hasAnyEvent: Boolean, lazyListState: LazyListState, newEventState: NewEventState, isLive: Boolean, @@ -258,8 +256,8 @@ private fun BoxScope.TimelineScrollHelper( } val latestOnScrollFinishedAt by rememberUpdatedState(onScrollFinishedAt) - LaunchedEffect(isScrollFinished, isTimelineEmpty) { - if (isScrollFinished && !isTimelineEmpty) { + LaunchedEffect(isScrollFinished, hasAnyEvent) { + if (isScrollFinished && hasAnyEvent) { // Notify the parent composable about the first visible item index when scrolling finishes latestOnScrollFinishedAt(lazyListState.firstVisibleItemIndex) } From 7397df806b6e7f6fa74332d1ef93ddf8fd74ceb0 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 25 Apr 2024 15:28:24 +0200 Subject: [PATCH 164/289] Always display 'lost recovery key?' option (#2745) * Always display 'lost recovery key?' option * Use `isLastDevice` it to display only 'enter recovery key' option for verification. * Update strings. This should fix the wrong term 'passcode' being used in the recovery key screen title. * Disable 'lost your recovery key?' button while the screen is in a loading state * Update screenshots --------- Co-authored-by: ElementBot --- changelog.d/2740.bugfix | 1 + .../FtueSessionVerificationFlowNode.kt | 17 --- .../impl/src/main/res/values/localazy.xml | 4 +- .../api/SecureBackupEntryPoint.kt | 1 - features/securebackup/impl/build.gradle.kts | 9 ++ .../securebackup/impl/SecureBackupFlowNode.kt | 4 + .../enter/SecureBackupEnterRecoveryKeyNode.kt | 2 + ...cureBackupEnterRecoveryKeyStateProvider.kt | 3 +- .../enter/SecureBackupEnterRecoveryKeyView.kt | 12 +- .../impl/src/main/res/values/localazy.xml | 3 +- .../SecureBackupEnterRecoveryKeyViewTest.kt | 110 ++++++++++++++++++ .../api/VerifySessionEntryPoint.kt | 1 - .../impl/VerifySelfSessionNode.kt | 1 - .../impl/VerifySelfSessionPresenter.kt | 5 +- .../impl/VerifySelfSessionState.kt | 2 +- .../impl/VerifySelfSessionStateProvider.kt | 4 +- .../impl/VerifySelfSessionView.kt | 6 - .../impl/VerifySelfSessionPresenterTests.kt | 16 +-- .../impl/VerifySelfSessionViewTest.kt | 22 +--- .../src/main/res/values/localazy.xml | 1 + ...KeyView-Day-3_4_null_0,NEXUS_5,1.0,en].png | 4 +- ...KeyView-Day-3_4_null_1,NEXUS_5,1.0,en].png | 4 +- ...KeyView-Day-3_4_null_2,NEXUS_5,1.0,en].png | 4 +- ...KeyView-Day-3_4_null_3,NEXUS_5,1.0,en].png | 4 +- ...yView-Night-3_5_null_0,NEXUS_5,1.0,en].png | 4 +- ...yView-Night-3_5_null_1,NEXUS_5,1.0,en].png | 4 +- ...yView-Night-3_5_null_2,NEXUS_5,1.0,en].png | 4 +- ...yView-Night-3_5_null_3,NEXUS_5,1.0,en].png | 4 +- ...ionView-Day-0_1_null_8,NEXUS_5,1.0,en].png | 4 +- ...nView-Night-0_2_null_8,NEXUS_5,1.0,en].png | 4 +- 30 files changed, 181 insertions(+), 83 deletions(-) create mode 100644 changelog.d/2740.bugfix create mode 100644 features/securebackup/impl/src/test/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyViewTest.kt diff --git a/changelog.d/2740.bugfix b/changelog.d/2740.bugfix new file mode 100644 index 0000000000..21aee0b66b --- /dev/null +++ b/changelog.d/2740.bugfix @@ -0,0 +1 @@ +Instead of displaying 'create new recovery key' on the session verification screen when there is no other session active, display it always under the 'enter recovery key' screen. diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/FtueSessionVerificationFlowNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/FtueSessionVerificationFlowNode.kt index f59c76199a..a5dc840267 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/FtueSessionVerificationFlowNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/FtueSessionVerificationFlowNode.kt @@ -58,9 +58,6 @@ class FtueSessionVerificationFlowNode @AssistedInject constructor( @Parcelize data object EnterRecoveryKey : NavTarget - - @Parcelize - data object CreateNewRecoveryKey : NavTarget } interface Callback : Plugin { @@ -68,10 +65,6 @@ class FtueSessionVerificationFlowNode @AssistedInject constructor( } private val secureBackupEntryPointCallback = object : SecureBackupEntryPoint.Callback { - override fun onCreateNewRecoveryKey() { - backstack.push(NavTarget.CreateNewRecoveryKey) - } - override fun onDone() { lifecycleScope.launch { // Move to the completed state view in the verification flow @@ -89,10 +82,6 @@ class FtueSessionVerificationFlowNode @AssistedInject constructor( backstack.push(NavTarget.EnterRecoveryKey) } - override fun onCreateNewRecoveryKey() { - backstack.push(NavTarget.CreateNewRecoveryKey) - } - override fun onDone() { plugins().forEach { it.onDone() } } @@ -105,12 +94,6 @@ class FtueSessionVerificationFlowNode @AssistedInject constructor( .callback(secureBackupEntryPointCallback) .build() } - is NavTarget.CreateNewRecoveryKey -> { - secureBackupEntryPoint.nodeBuilder(this, buildContext) - .params(SecureBackupEntryPoint.Params(SecureBackupEntryPoint.InitialTarget.CreateNewRecoveryKey)) - .callback(secureBackupEntryPointCallback) - .build() - } } } diff --git a/features/ftue/impl/src/main/res/values/localazy.xml b/features/ftue/impl/src/main/res/values/localazy.xml index bf65a7ff0a..6df14dc152 100644 --- a/features/ftue/impl/src/main/res/values/localazy.xml +++ b/features/ftue/impl/src/main/res/values/localazy.xml @@ -9,8 +9,8 @@ "If you encounter the same problem, try a different wifi network or use your mobile data instead of wifi" "If that doesn’t work, sign in manually" "Connection not secure" - "You’ll be asked to enter the two digits shown below." - "Enter number on your device" + "You’ll be asked to enter the two digits shown on this device." + "Enter the number below on your other device" "Open %1$s on a desktop device" "Click on your avatar" "Select %1$s" diff --git a/features/securebackup/api/src/main/kotlin/io/element/android/features/securebackup/api/SecureBackupEntryPoint.kt b/features/securebackup/api/src/main/kotlin/io/element/android/features/securebackup/api/SecureBackupEntryPoint.kt index 1904ceb2ff..45e3a75738 100644 --- a/features/securebackup/api/src/main/kotlin/io/element/android/features/securebackup/api/SecureBackupEntryPoint.kt +++ b/features/securebackup/api/src/main/kotlin/io/element/android/features/securebackup/api/SecureBackupEntryPoint.kt @@ -41,7 +41,6 @@ interface SecureBackupEntryPoint : FeatureEntryPoint { fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder interface Callback : Plugin { - fun onCreateNewRecoveryKey() fun onDone() } diff --git a/features/securebackup/impl/build.gradle.kts b/features/securebackup/impl/build.gradle.kts index 1d7a97b344..b1060dcd0e 100644 --- a/features/securebackup/impl/build.gradle.kts +++ b/features/securebackup/impl/build.gradle.kts @@ -23,6 +23,12 @@ plugins { android { namespace = "io.element.android.features.securebackup.impl" + + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } } anvil { @@ -51,8 +57,11 @@ dependencies { testImplementation(libs.molecule.runtime) testImplementation(libs.test.truth) testImplementation(libs.test.turbine) + testImplementation(libs.test.robolectric) + testImplementation(libs.androidx.compose.ui.test.junit) testImplementation(projects.libraries.matrix.test) testImplementation(projects.tests.testutils) + testReleaseImplementation(libs.androidx.compose.ui.test.manifest) ksp(libs.showkase.processor) } diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/SecureBackupFlowNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/SecureBackupFlowNode.kt index 1f22e57c03..f696066181 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/SecureBackupFlowNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/SecureBackupFlowNode.kt @@ -136,6 +136,10 @@ class SecureBackupFlowNode @AssistedInject constructor( backstack.pop() } } + + override fun onCreateNewRecoveryKey() { + backstack.push(NavTarget.CreateNewRecoveryKey) + } } createNode(buildContext, plugins = listOf(callback)) } diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyNode.kt index 597ab4c14e..c80becb88a 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyNode.kt @@ -35,6 +35,7 @@ class SecureBackupEnterRecoveryKeyNode @AssistedInject constructor( ) : Node(buildContext, plugins = plugins) { interface Callback : Plugin { fun onEnterRecoveryKeySuccess() + fun onCreateNewRecoveryKey() } private val callback = plugins().first() @@ -47,6 +48,7 @@ class SecureBackupEnterRecoveryKeyNode @AssistedInject constructor( modifier = modifier, onDone = callback::onEnterRecoveryKeySuccess, onBackClicked = ::navigateUp, + onCreateNewRecoveryKey = callback::onCreateNewRecoveryKey ) } } diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyStateProvider.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyStateProvider.kt index 2869b9a281..7052c043c7 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyStateProvider.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyStateProvider.kt @@ -36,6 +36,7 @@ fun aSecureBackupEnterRecoveryKeyState( recoveryKey: String = aFormattedRecoveryKey(), isSubmitEnabled: Boolean = recoveryKey.isNotEmpty(), submitAction: AsyncAction = AsyncAction.Uninitialized, + eventSink: (SecureBackupEnterRecoveryKeyEvents) -> Unit = {}, ) = SecureBackupEnterRecoveryKeyState( recoveryKeyViewState = RecoveryKeyViewState( recoveryKeyUserStory = RecoveryKeyUserStory.Enter, @@ -44,5 +45,5 @@ fun aSecureBackupEnterRecoveryKeyState( ), isSubmitEnabled = isSubmitEnabled, submitAction = submitAction, - eventSink = {} + eventSink = eventSink, ) diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyView.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyView.kt index b74078c7f2..db23018c6f 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyView.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyView.kt @@ -32,6 +32,7 @@ import io.element.android.libraries.designsystem.components.async.AsyncActionVie import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Button +import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.ui.strings.CommonStrings @Composable @@ -39,6 +40,7 @@ fun SecureBackupEnterRecoveryKeyView( state: SecureBackupEnterRecoveryKeyState, onDone: () -> Unit, onBackClicked: () -> Unit, + onCreateNewRecoveryKey: () -> Unit, modifier: Modifier = Modifier, ) { AsyncActionView( @@ -57,7 +59,7 @@ fun SecureBackupEnterRecoveryKeyView( title = stringResource(id = R.string.screen_recovery_key_confirm_title), subTitle = stringResource(id = R.string.screen_recovery_key_confirm_description), content = { Content(state = state) }, - buttons = { Buttons(state = state) } + buttons = { Buttons(state = state, onCreateRecoveryKey = onCreateNewRecoveryKey) } ) } @@ -81,6 +83,7 @@ private fun Content( @Composable private fun ColumnScope.Buttons( state: SecureBackupEnterRecoveryKeyState, + onCreateRecoveryKey: () -> Unit, ) { Button( text = stringResource(id = CommonStrings.action_continue), @@ -91,6 +94,12 @@ private fun ColumnScope.Buttons( state.eventSink.invoke(SecureBackupEnterRecoveryKeyEvents.Submit) } ) + TextButton( + text = stringResource(id = R.string.screen_recovery_key_confirm_lost_recovery_key), + enabled = !state.submitAction.isLoading(), + modifier = Modifier.fillMaxWidth(), + onClick = onCreateRecoveryKey, + ) } @PreviewsDayNight @@ -102,5 +111,6 @@ internal fun SecureBackupEnterRecoveryKeyViewPreview( state = state, onDone = {}, onBackClicked = {}, + onCreateNewRecoveryKey = {}, ) } diff --git a/features/securebackup/impl/src/main/res/values/localazy.xml b/features/securebackup/impl/src/main/res/values/localazy.xml index d3fb41857e..e1159031a2 100644 --- a/features/securebackup/impl/src/main/res/values/localazy.xml +++ b/features/securebackup/impl/src/main/res/values/localazy.xml @@ -35,8 +35,9 @@ "If you have a security key or security phrase, this will work too." "Recovery key or passcode" "Enter…" + "Lost your recovery key?" "Recovery key confirmed" - "Enter your recovery key or passcode" + "Enter your recovery key" "Copied recovery key" "Generating…" "Save recovery key" diff --git a/features/securebackup/impl/src/test/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyViewTest.kt b/features/securebackup/impl/src/test/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyViewTest.kt new file mode 100644 index 0000000000..f074116af1 --- /dev/null +++ b/features/securebackup/impl/src/test/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyViewTest.kt @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.securebackup.impl.enter + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.securebackup.impl.R +import io.element.android.libraries.architecture.AsyncAction +import io.element.android.libraries.ui.strings.CommonStrings +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import io.element.android.tests.testutils.pressBack +import io.element.android.tests.testutils.pressBackKey +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class SecureBackupEnterRecoveryKeyViewTest { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `back key pressed - calls onBackClicked`() { + ensureCalledOnce { callback -> + rule.setSecureBackupEnterRecoveryKeyView( + aSecureBackupEnterRecoveryKeyState(), + onBackClicked = callback, + ) + rule.pressBackKey() + } + } + + @Test + fun `back button clicked - calls onBackClicked`() { + ensureCalledOnce { callback -> + rule.setSecureBackupEnterRecoveryKeyView( + aSecureBackupEnterRecoveryKeyState(), + onBackClicked = callback, + ) + rule.pressBack() + } + } + + @Test + fun `tapping on Continue when key is valid - calls expected action`() { + val recorder = EventsRecorder() + rule.setSecureBackupEnterRecoveryKeyView( + aSecureBackupEnterRecoveryKeyState(isSubmitEnabled = true, eventSink = recorder), + ) + rule.clickOn(CommonStrings.action_continue) + + recorder.assertSingle(SecureBackupEnterRecoveryKeyEvents.Submit) + } + + @Test + fun `tapping on Lost your recovery key - calls onCreateNewRecoveryKey`() { + ensureCalledOnce { callback -> + rule.setSecureBackupEnterRecoveryKeyView( + aSecureBackupEnterRecoveryKeyState(), + onCreateNewRecoveryKey = callback, + ) + rule.clickOn(R.string.screen_recovery_key_confirm_lost_recovery_key) + } + } + + @Test + fun `when submit action succeeds - calls onDone`() { + ensureCalledOnce { callback -> + rule.setSecureBackupEnterRecoveryKeyView( + aSecureBackupEnterRecoveryKeyState(submitAction = AsyncAction.Success(Unit)), + onDone = callback, + ) + } + } + + private fun AndroidComposeTestRule.setSecureBackupEnterRecoveryKeyView( + state: SecureBackupEnterRecoveryKeyState, + onDone: () -> Unit = EnsureNeverCalled(), + onBackClicked: () -> Unit = EnsureNeverCalled(), + onCreateNewRecoveryKey: () -> Unit = EnsureNeverCalled(), + ) { + rule.setContent { + SecureBackupEnterRecoveryKeyView( + state = state, + onDone = onDone, + onBackClicked = onBackClicked, + onCreateNewRecoveryKey = onCreateNewRecoveryKey + ) + } + } +} diff --git a/features/verifysession/api/src/main/kotlin/io/element/android/features/verifysession/api/VerifySessionEntryPoint.kt b/features/verifysession/api/src/main/kotlin/io/element/android/features/verifysession/api/VerifySessionEntryPoint.kt index 70600f7f7c..8d19ca5698 100644 --- a/features/verifysession/api/src/main/kotlin/io/element/android/features/verifysession/api/VerifySessionEntryPoint.kt +++ b/features/verifysession/api/src/main/kotlin/io/element/android/features/verifysession/api/VerifySessionEntryPoint.kt @@ -31,7 +31,6 @@ interface VerifySessionEntryPoint : FeatureEntryPoint { interface Callback : Plugin { fun onEnterRecoveryKey() - fun onCreateNewRecoveryKey() fun onDone() } } diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionNode.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionNode.kt index 222683156a..6fbde66faf 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionNode.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionNode.kt @@ -43,7 +43,6 @@ class VerifySelfSessionNode @AssistedInject constructor( state = state, modifier = modifier, onEnterRecoveryKey = callback::onEnterRecoveryKey, - onCreateNewRecoveryKey = callback::onCreateNewRecoveryKey, onFinished = callback::onDone, ) } diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenter.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenter.kt index e414f1b746..b31cbd0162 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenter.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenter.kt @@ -103,7 +103,10 @@ class VerifySelfSessionPresenter @Inject constructor( ): VerifySelfSessionState.VerificationStep = when (val machineState = this) { StateMachineState.Initial, null -> { - VerifySelfSessionState.VerificationStep.Initial(canEnterRecoveryKey = canEnterRecoveryKey, isLastDevice = encryptionService.isLastDevice.value) + VerifySelfSessionState.VerificationStep.Initial( + canEnterRecoveryKey = canEnterRecoveryKey, + isLastDevice = encryptionService.isLastDevice.value + ) } StateMachineState.RequestingVerification, StateMachineState.StartingSasVerification, diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionState.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionState.kt index 30d91b8fa4..4db21d88b8 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionState.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionState.kt @@ -29,7 +29,7 @@ data class VerifySelfSessionState( ) { @Stable sealed interface VerificationStep { - data class Initial(val canEnterRecoveryKey: Boolean, val isLastDevice: Boolean) : VerificationStep + data class Initial(val canEnterRecoveryKey: Boolean, val isLastDevice: Boolean = false) : VerificationStep data object Canceled : VerificationStep data object AwaitingOtherDeviceResponse : VerificationStep data object Ready : VerificationStep diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionStateProvider.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionStateProvider.kt index c066d48613..f6db1bc65f 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionStateProvider.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionStateProvider.kt @@ -45,7 +45,7 @@ open class VerifySelfSessionStateProvider : PreviewParameterProvider Unit = {}, ) = VerifySelfSessionState( diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionView.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionView.kt index e54ba31872..42d752d8f5 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionView.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionView.kt @@ -66,7 +66,6 @@ import io.element.android.features.verifysession.impl.VerifySelfSessionState.Ver fun VerifySelfSessionView( state: VerifySelfSessionState, onEnterRecoveryKey: () -> Unit, - onCreateNewRecoveryKey: () -> Unit, onFinished: () -> Unit, modifier: Modifier = Modifier, ) { @@ -115,7 +114,6 @@ fun VerifySelfSessionView( screenState = state, goBack = ::resetFlow, onEnterRecoveryKey = onEnterRecoveryKey, - onCreateNewRecoveryKey = onCreateNewRecoveryKey, onFinished = onFinished, ) } @@ -228,7 +226,6 @@ private fun EmojiItemView(emoji: VerificationEmoji, modifier: Modifier = Modifie private fun BottomMenu( screenState: VerifySelfSessionState, onEnterRecoveryKey: () -> Unit, - onCreateNewRecoveryKey: () -> Unit, goBack: () -> Unit, onFinished: () -> Unit, ) { @@ -243,8 +240,6 @@ private fun BottomMenu( BottomMenu( positiveButtonTitle = stringResource(R.string.screen_session_verification_enter_recovery_key), onPositiveButtonClicked = onEnterRecoveryKey, - negativeButtonTitle = stringResource(R.string.screen_identity_confirmation_create_new_recovery_key), - onNegativeButtonClicked = onCreateNewRecoveryKey, ) } else { BottomMenu( @@ -346,7 +341,6 @@ internal fun VerifySelfSessionViewPreview(@PreviewParameter(VerifySelfSessionSta VerifySelfSessionView( state = state, onEnterRecoveryKey = {}, - onCreateNewRecoveryKey = {}, onFinished = {}, ) } diff --git a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt index 9100cc65c9..f75dd2ff79 100644 --- a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt +++ b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt @@ -53,7 +53,7 @@ class VerifySelfSessionPresenterTests { presenter.present() }.test { awaitItem().run { - assertThat(verificationFlowStep).isEqualTo(VerificationStep.Initial(false, false)) + assertThat(verificationFlowStep).isEqualTo(VerificationStep.Initial(false)) assertThat(displaySkipButton).isTrue() } } @@ -80,7 +80,7 @@ class VerifySelfSessionPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Initial(true, false)) + assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Initial(true)) } } @@ -95,7 +95,7 @@ class VerifySelfSessionPresenterTests { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Initial(true, true)) + assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Initial(canEnterRecoveryKey = true, isLastDevice = true)) } } @@ -118,7 +118,7 @@ class VerifySelfSessionPresenterTests { presenter.present() }.test { val initialState = awaitItem() - assertThat(initialState.verificationFlowStep).isEqualTo(VerificationStep.Initial(false, false)) + assertThat(initialState.verificationFlowStep).isEqualTo(VerificationStep.Initial(false)) val eventSink = initialState.eventSink eventSink(VerifySelfSessionViewEvents.StartSasVerification) // Await for other device response: @@ -137,7 +137,7 @@ class VerifySelfSessionPresenterTests { presenter.present() }.test { val initialState = awaitItem() - assertThat(initialState.verificationFlowStep).isEqualTo(VerificationStep.Initial(false, false)) + assertThat(initialState.verificationFlowStep).isEqualTo(VerificationStep.Initial(false)) val eventSink = initialState.eventSink eventSink(VerifySelfSessionViewEvents.Cancel) expectNoEvents() @@ -172,7 +172,7 @@ class VerifySelfSessionPresenterTests { awaitItem().eventSink(VerifySelfSessionViewEvents.RequestVerification) service.shouldFail = false assertThat(awaitItem().verificationFlowStep).isInstanceOf(VerificationStep.AwaitingOtherDeviceResponse::class.java) - assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Initial(false, false)) + assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Initial(false)) } } @@ -231,7 +231,7 @@ class VerifySelfSessionPresenterTests { assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Canceled) state.eventSink(VerifySelfSessionViewEvents.Reset) // Went back to initial state - assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Initial(false, false)) + assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Initial(false)) cancelAndIgnoreRemainingEvents() } } @@ -315,7 +315,7 @@ class VerifySelfSessionPresenterTests { sessionVerificationData: SessionVerificationData = SessionVerificationData.Emojis(emptyList()), ): VerifySelfSessionState { var state = awaitItem() - assertThat(state.verificationFlowStep).isEqualTo(VerificationStep.Initial(false, false)) + assertThat(state.verificationFlowStep).isEqualTo(VerificationStep.Initial(false)) state.eventSink(VerifySelfSessionViewEvents.RequestVerification) // Await for other device response: state = awaitItem() diff --git a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionViewTest.kt b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionViewTest.kt index 4d5f67f0b1..52158c2d7f 100644 --- a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionViewTest.kt +++ b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionViewTest.kt @@ -144,7 +144,7 @@ class VerifySelfSessionViewTest { ensureCalledOnce { callback -> rule.setVerifySelfSessionView( aVerifySelfSessionState( - verificationFlowStep = VerifySelfSessionState.VerificationStep.Initial(true, false), + verificationFlowStep = VerifySelfSessionState.VerificationStep.Initial(true), eventSink = eventsRecorder ), onEnterRecoveryKey = callback, @@ -153,22 +153,6 @@ class VerifySelfSessionViewTest { } } - @Config(qualifiers = "h1024dp") - @Test - fun `clicking on create new recovery key calls the expected callback`() { - val eventsRecorder = EventsRecorder(expectEvents = false) - ensureCalledOnce { callback -> - rule.setVerifySelfSessionView( - aVerifySelfSessionState( - verificationFlowStep = VerifySelfSessionState.VerificationStep.Initial(true, true), - eventSink = eventsRecorder - ), - onCreateNewRecoveryKey = callback, - ) - rule.clickOn(R.string.screen_identity_confirmation_create_new_recovery_key) - } - } - @Test fun `clicking on they match emits the expected event`() { val eventsRecorder = EventsRecorder() @@ -206,7 +190,7 @@ class VerifySelfSessionViewTest { val eventsRecorder = EventsRecorder() rule.setVerifySelfSessionView( aVerifySelfSessionState( - verificationFlowStep = VerifySelfSessionState.VerificationStep.Initial(canEnterRecoveryKey = true, isLastDevice = false), + verificationFlowStep = VerifySelfSessionState.VerificationStep.Initial(canEnterRecoveryKey = true), displaySkipButton = true, eventSink = eventsRecorder ), @@ -232,14 +216,12 @@ class VerifySelfSessionViewTest { private fun AndroidComposeTestRule.setVerifySelfSessionView( state: VerifySelfSessionState, onEnterRecoveryKey: () -> Unit = EnsureNeverCalled(), - onCreateNewRecoveryKey: () -> Unit = EnsureNeverCalled(), onFinished: () -> Unit = EnsureNeverCalled(), ) { rule.setContent { VerifySelfSessionView( state = state, onEnterRecoveryKey = onEnterRecoveryKey, - onCreateNewRecoveryKey = onCreateNewRecoveryKey, onFinished = onFinished, ) } diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 7d49261c4e..832a3df104 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -215,6 +215,7 @@ "Topic" "What is this room about?" "Unable to decrypt" + "You don\'t have access to this message" "Invites couldn\'t be sent to one or more users." "Unable to send invite(s)" "Unlock" diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en].png index a062477882..d8682a6a15 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6df37aa3a9d8411d3b3f9cd4dc67e48c271030350fee5cc464da8b564bea14d0 -size 40410 +oid sha256:5584b334e0ca80d3619d00d1168b2a15ced299e529adb8bd53bfc9bc9e495ecf +size 41339 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en].png index 60aa757d1b..aa07ae2e60 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:923a6792ecb57eaefb86042327495ffa48294187eb97fdb2f36ca16b8e2d2859 -size 52163 +oid sha256:3ffbd8973d7370f0a992dc148b73bcc243b77b4e80d9a7ce8a49aec1312ec451 +size 52942 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en].png index 43f66fe1bd..5eba9096cd 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9296a3f7d3c3ee8aa4d8ee3fc310cab8c539c7adfd4b14156da65608a5e6fd10 -size 50565 +oid sha256:8154d4dfb395001e30dfb0807e796996abb812aa40523a3ec2c7a996345a1cb0 +size 50651 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en].png index fa793735c5..d9f174c0e9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fee5009acc5128d48791066fb45555d0fa261cf09c9b372cca8570561c3055b -size 44297 +oid sha256:ed4451219724c9b5dfb151a3d138dd54dfba6c78b961881bf56b602813dae13b +size 44523 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en].png index 1855caae90..9dd8bd3bfb 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b11e7ce69453d49bb916bec23ce0974e33ae788911ab12cea777ba238141bc77 -size 37965 +oid sha256:73b5a7598ca2255e88ef2098168e326aa1d23952ca8a43360380a6bfc2b36cce +size 38770 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en].png index 68beb560ea..a5ed227845 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aefbf69085a8279090018dd35a465614b2c876932746e650e7faf6d84f062381 -size 48364 +oid sha256:92ec6f85b19f217c9b5242e183e868d7288c0aca3578e6e563907910197113fe +size 49105 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en].png index 65c93af2ba..ef11d24386 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b6c6e849d68d516000644352c347587910f99ffd0d441feb8cf72a981aa30e3 -size 46849 +oid sha256:857fe8d13c9801edffb6ae9e36317a279addee2ea1729fc4b0be84d45e06d023 +size 47449 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en].png index 26d115b0d0..f9e00a548e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65c1faa6875a6c2b9ebe282f83e8a82b6e358f724082b53525d31a6c1bff4b15 -size 39312 +oid sha256:2731b003df8b067a1d8f04ccd8209ce8f6a3de0c6469c29ea3cc1025390e378a +size 39419 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en].png index eabba435c0..8e2311a544 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:409858802c14fd755380aa67fedb52f04a5668cf0999104f4fff4ffbc3711743 -size 28968 +oid sha256:8421c783940ce8e9033d313b4c10b084fa7334b8c72d7e236c3619710b0c2658 +size 23676 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en].png index 312fe2c859..2ece1c3d99 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7eb330ff5a506ee6198a0ec5acc3ef1b9db58161aa8eb9dedf468719f3e55a6 -size 26778 +oid sha256:b4d63523589ee13ac766f135efe070e297e0673287bd970d3c805f57ac567fec +size 22138 From 268c196e352e9a100a3ac29af31dfd6f5ad9b32c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 14:45:44 +0200 Subject: [PATCH 165/289] Remove flag RoomListFilters. This is also fixing the filter reset issue when going back to the room list. --- .../features/roomlist/impl/RoomListState.kt | 2 +- .../roomlist/impl/RoomListStateProvider.kt | 3 +-- .../impl/filters/RoomListFiltersPresenter.kt | 25 ++++++------------- .../impl/filters/RoomListFiltersState.kt | 1 - .../filters/RoomListFiltersStateProvider.kt | 2 -- .../filters/RoomListFiltersPresenterTests.kt | 4 --- .../libraries/featureflag/api/FeatureFlags.kt | 7 ------ .../impl/StaticFeatureFlagProvider.kt | 1 - 8 files changed, 9 insertions(+), 36 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt index 9f5b0d6b0d..c127dbdd2a 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt @@ -41,7 +41,7 @@ data class RoomListState( val acceptDeclineInviteState: AcceptDeclineInviteState, val eventSink: (RoomListEvents) -> Unit, ) { - val displayFilters = filtersState.isFeatureEnabled && contentState is RoomListContentState.Rooms + val displayFilters = contentState is RoomListContentState.Rooms val displayActions = contentState !is RoomListContentState.Migration sealed interface ContextMenu { diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index 976040b5a7..fe000c948e 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -52,7 +52,6 @@ open class RoomListStateProvider : PreviewParameterProvider { aRoomListState(contentState = aSkeletonContentState()), aRoomListState(matrixUser = MatrixUser(userId = UserId("@id:domain")), contentState = aMigrationContentState()), aRoomListState(searchState = aRoomListSearchState(isSearchActive = true, query = "Test")), - aRoomListState(filtersState = aRoomListFiltersState(isFeatureEnabled = true)), ) } @@ -64,7 +63,7 @@ internal fun aRoomListState( contextMenu: RoomListState.ContextMenu = RoomListState.ContextMenu.Hidden, leaveRoomState: LeaveRoomState = aLeaveRoomState(), searchState: RoomListSearchState = aRoomListSearchState(), - filtersState: RoomListFiltersState = aRoomListFiltersState(isFeatureEnabled = false), + filtersState: RoomListFiltersState = aRoomListFiltersState(), contentState: RoomListContentState = aRoomsContentState(), acceptDeclineInviteState: AcceptDeclineInviteState = anAcceptDeclineInviteState(), eventSink: (RoomListEvents) -> Unit = {} diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt index 8d1ec0e86b..4292492af5 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt @@ -22,8 +22,6 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import io.element.android.features.roomlist.impl.filters.selection.FilterSelectionStrategy import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.featureflag.api.FeatureFlagService -import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.roomlist.RoomListService import kotlinx.collections.immutable.toPersistentList import javax.inject.Inject @@ -31,12 +29,10 @@ import io.element.android.libraries.matrix.api.roomlist.RoomListFilter as Matrix class RoomListFiltersPresenter @Inject constructor( private val roomListService: RoomListService, - private val featureFlagService: FeatureFlagService, private val filterSelectionStrategy: FilterSelectionStrategy, ) : Presenter { @Composable override fun present(): RoomListFiltersState { - val isFeatureEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.RoomListFilters).collectAsState(false) val filters by filterSelectionStrategy.filterSelectionStates.collectAsState() fun handleEvents(event: RoomListFiltersEvents) { @@ -50,32 +46,25 @@ class RoomListFiltersPresenter @Inject constructor( } } - LaunchedEffect(isFeatureEnabled) { - if (!isFeatureEnabled) { - filterSelectionStrategy.clear() - } - } - LaunchedEffect(filters) { val allRoomsFilter = MatrixRoomListFilter.All( filters .filter { it.isSelected } .map { roomListFilter -> - when (roomListFilter.filter) { - RoomListFilter.Rooms -> MatrixRoomListFilter.Category.Group - RoomListFilter.People -> MatrixRoomListFilter.Category.People - RoomListFilter.Unread -> MatrixRoomListFilter.Unread - RoomListFilter.Favourites -> MatrixRoomListFilter.Favorite - RoomListFilter.Invites -> MatrixRoomListFilter.Invite + when (roomListFilter.filter) { + RoomListFilter.Rooms -> MatrixRoomListFilter.Category.Group + RoomListFilter.People -> MatrixRoomListFilter.Category.People + RoomListFilter.Unread -> MatrixRoomListFilter.Unread + RoomListFilter.Favourites -> MatrixRoomListFilter.Favorite + RoomListFilter.Invites -> MatrixRoomListFilter.Invite + } } - } ) roomListService.allRooms.updateFilter(allRoomsFilter) } return RoomListFiltersState( filterSelectionStates = filters.toPersistentList(), - isFeatureEnabled = isFeatureEnabled, eventSink = ::handleEvents ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersState.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersState.kt index 14850ef82e..af89e84091 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersState.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersState.kt @@ -22,7 +22,6 @@ import kotlinx.collections.immutable.toPersistentList data class RoomListFiltersState( val filterSelectionStates: ImmutableList, - val isFeatureEnabled: Boolean, val eventSink: (RoomListFiltersEvents) -> Unit, ) { val hasAnyFilterSelected = filterSelectionStates.any { it.isSelected } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt index 00d1352728..298c493800 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt @@ -32,10 +32,8 @@ class RoomListFiltersStateProvider : PreviewParameterProvider = RoomListFilter.entries.map { FilterSelectionState(it, isSelected = false) }, - isFeatureEnabled: Boolean = true, eventSink: (RoomListFiltersEvents) -> Unit = {}, ) = RoomListFiltersState( filterSelectionStates = filterSelectionStates.toImmutableList(), - isFeatureEnabled = isFeatureEnabled, eventSink = eventSink, ) diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt index 0a81f546c5..8d1fa69276 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt @@ -22,8 +22,6 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.roomlist.impl.filters.selection.DefaultFilterSelectionStrategy import io.element.android.features.roomlist.impl.filters.selection.FilterSelectionState -import io.element.android.libraries.featureflag.api.FeatureFlagService -import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService import io.element.android.tests.testutils.awaitLastSequentialItem @@ -120,11 +118,9 @@ private fun filterSelectionState(filter: RoomListFilter, selected: Boolean) = Fi private fun createRoomListFiltersPresenter( roomListService: RoomListService = FakeRoomListService(), - featureFlagService: FeatureFlagService = FakeFeatureFlagService(), ): RoomListFiltersPresenter { return RoomListFiltersPresenter( roomListService = roomListService, - featureFlagService = featureFlagService, filterSelectionStrategy = DefaultFilterSelectionStrategy(), ) } diff --git a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt index 765e97f851..98e3818ad3 100644 --- a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt +++ b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt @@ -75,13 +75,6 @@ enum class FeatureFlags( defaultValue = true, isFinished = false, ), - RoomListFilters( - key = "feature.roomlistfilters", - title = "Room list filters", - description = "Allow user to filter the room list", - defaultValue = true, - isFinished = false, - ), RoomDirectorySearch( key = "feature.roomdirectorysearch", title = "Room directory search", diff --git a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt index 43fc0f0823..2f01633858 100644 --- a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt +++ b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt @@ -40,7 +40,6 @@ class StaticFeatureFlagProvider @Inject constructor() : FeatureFlags.PinUnlock -> true FeatureFlags.Mentions -> true FeatureFlags.MarkAsUnread -> true - FeatureFlags.RoomListFilters -> true FeatureFlags.RoomDirectorySearch -> false } } else { From 5f4f7b9435aebf6d5a880ebe1124a219335b2513 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Thu, 25 Apr 2024 14:03:20 +0000 Subject: [PATCH 166/289] Update screenshots --- ...tView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...tView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png | 3 --- ...tView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...tView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png | 3 --- ...iew_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png | 4 ++-- 10 files changed, 16 insertions(+), 22 deletions(-) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png index 43486bc1f5..b1378d9cef 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a219527b5d2fc5e581f9e4e5026284a823f0e67b1ec33e12af526b3628d52e6 -size 80571 +oid sha256:fc44364cd6f9862a9ee949897ca6a6368f4c7fff8f5bf9ec954e4719c6dc2730 +size 90423 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png index 43486bc1f5..b1378d9cef 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a219527b5d2fc5e581f9e4e5026284a823f0e67b1ec33e12af526b3628d52e6 -size 80571 +oid sha256:fc44364cd6f9862a9ee949897ca6a6368f4c7fff8f5bf9ec954e4719c6dc2730 +size 90423 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png deleted file mode 100644 index b1378d9cef..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_11,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc44364cd6f9862a9ee949897ca6a6368f4c7fff8f5bf9ec954e4719c6dc2730 -size 90423 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png index f020b503a8..b752f7c995 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:873e6d0627246b4e74407020419e5c10dbc1b774c517556d293ef37235002fde -size 80631 +oid sha256:40927ec198f59c22edaa1d1c572930f4a78c0ba090326177f67a199eee053e91 +size 90770 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png index bd0b9fd869..8cf3381e6e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb0cf03d1806a0312e10bc4d758102dd0b872d88106464f2112de2dc505e7e7b -size 102780 +oid sha256:beee754b1e12d067b73f1e6928f1c966355da43fd73dc29cf6ac9afc3d23c1b9 +size 110781 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png index 29e84da0f7..a45c42c14d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:beeee93d72ab3bdd601dd03eec5beb271181a200c11c042b985b9495ded0c320 -size 82878 +oid sha256:9a90f232c00dc9b7c1e74b16461e6b91b18f5729f771c3a60f4aa68c29513e97 +size 91791 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png index 29e84da0f7..a45c42c14d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:beeee93d72ab3bdd601dd03eec5beb271181a200c11c042b985b9495ded0c320 -size 82878 +oid sha256:9a90f232c00dc9b7c1e74b16461e6b91b18f5729f771c3a60f4aa68c29513e97 +size 91791 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png deleted file mode 100644 index a45c42c14d..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_11,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a90f232c00dc9b7c1e74b16461e6b91b18f5729f771c3a60f4aa68c29513e97 -size 91791 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png index ac0113ead9..795be563b5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df8723b2a7cbc1720128a0e8dfdbb10cb82394881ad216ed328b15395302e463 -size 82322 +oid sha256:fddef14145f5c97e7a088985bf5b255de9098bd0ab35153d05da594428e200cb +size 91518 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png index 8e0a5f6a2c..1e359b74fc 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6d4e0c7fc8607c6d05997e0c1201311cbe05a69851b9828156969f2ce300246 -size 104171 +oid sha256:c166fbdc31b616aeffa3e31d11b54c7a5505c9a2c0ba2dcbd5179c4e91072e4b +size 111706 From 25751efbbe50975e0fb7697934871035f7640d10 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 16:57:45 +0200 Subject: [PATCH 167/289] Fix compilation of minimal. --- .../kotlin/io/element/android/samples/minimal/RoomListScreen.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt index 49fa29ced3..3e91494dcb 100644 --- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt +++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt @@ -129,7 +129,6 @@ class RoomListScreen( ), filtersPresenter = RoomListFiltersPresenter( roomListService = matrixClient.roomListService, - featureFlagService = featureFlagService, filterSelectionStrategy = DefaultFilterSelectionStrategy(), ), acceptDeclineInvitePresenter = AcceptDeclineInvitePresenter( From 7ac6e4166a7887fe1894cc75204d7fdb607f1471 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 25 Apr 2024 17:41:10 +0200 Subject: [PATCH 168/289] Timeline permalink : scroll to fetched event when known --- .../messages/impl/timeline/TimelinePresenter.kt | 17 +++++++++++------ .../messages/impl/timeline/TimelineState.kt | 1 + .../messages/impl/timeline/TimelineView.kt | 4 ++-- .../components/TimelineItemVirtualRow.kt | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt index f3ba877888..61b2add5cb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt @@ -146,7 +146,7 @@ class TimelinePresenter @AssistedInject constructor( timelineController.focusOnEvent(event.eventId) .fold( onSuccess = { - focusRequestState.value = FocusRequestState.None + focusRequestState.value = FocusRequestState.Fetched }, onFailure = { focusRequestState.value = FocusRequestState.Failure(it) @@ -165,15 +165,20 @@ class TimelinePresenter @AssistedInject constructor( } } - // Makes sure to get back to live when there is nothing more to load forwards - LaunchedEffect(isLive) { - - } - LaunchedEffect(timelineItems.size) { computeNewItemState(timelineItems, prevMostRecentItemId, newEventState) } + LaunchedEffect(timelineItems.size, focusRequestState.value, focusedEventId.value) { + val currentFocusedEventId = focusedEventId.value + if (focusRequestState.value is FocusRequestState.Fetched && currentFocusedEventId != null) { + if (timelineItemIndexer.isKnown(currentFocusedEventId)) { + val index = timelineItemIndexer.indexOf(currentFocusedEventId) + focusRequestState.value = FocusRequestState.Cached(index) + } + } + } + LaunchedEffect(Unit) { combine(timelineController.timelineItems(), room.membersStateFlow) { items, membersState -> timelineItemsFactory.replaceWith( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt index 4a345af90c..67a7dac574 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt @@ -40,6 +40,7 @@ sealed interface FocusRequestState { data object None : FocusRequestState data class Cached(val index: Int): FocusRequestState data object Fetching : FocusRequestState + data object Fetched: FocusRequestState data class Failure(val throwable: Throwable) : FocusRequestState } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index db7b89833b..101ad58703 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -195,7 +195,7 @@ private fun FocusRequestStateView( FocusRequestState.Fetching -> { ProgressDialog(modifier = modifier, onDismissRequest = onClearFocusRequestState) } - is FocusRequestState.Cached, FocusRequestState.None -> Unit + else -> Unit } } @@ -237,7 +237,7 @@ private fun BoxScope.TimelineScrollHelper( } } - LaunchedEffect(key1 = focusRequestState) { + LaunchedEffect(focusRequestState) { if (focusRequestState is FocusRequestState.Cached) { if (abs(lazyListState.firstVisibleItemIndex - focusRequestState.index) < 10) { lazyListState.animateScrollToItem(focusRequestState.index) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt index 9dd1210af0..df9d355dbf 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt @@ -51,7 +51,7 @@ fun TimelineItemVirtualRow( TimelineItemRoomBeginningModel -> TimelineItemRoomBeginningView(roomName = timelineRoomInfo.name) is TimelineItemLoadingIndicatorModel -> { TimelineLoadingMoreIndicator() - LaunchedEffect(key1 = virtual.model.timestamp) { + LaunchedEffect(virtual.model.timestamp) { eventSink(TimelineEvents.LoadMore(virtual.model.direction)) } } From 198c45d01628d4cc0451ce6bd3dbd78108c31fe9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Apr 2024 16:00:52 +0000 Subject: [PATCH 169/289] Update dependency org.matrix.rustcomponents:sdk-android to v0.2.16 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 86910e348a..d68e9f1f61 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -154,7 +154,7 @@ jsoup = "org.jsoup:jsoup:1.17.2" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:1.4.2" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.15" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.16" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } From 7b4fa146e5a7920f364d89bcbfa89f4cce198c60 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 25 Apr 2024 23:34:04 +0200 Subject: [PATCH 170/289] Timeline : try to get better forward pagination. --- .../components/TimelineItemVirtualRow.kt | 8 +- .../virtual/TimelineLoadingMoreIndicator.kt | 39 ++++++--- .../virtual/TimelineItemVirtualFactory.kt | 4 +- ... TimelineItemLastForwardIndicatorModel.kt} | 4 +- .../item/virtual/VirtualTimelineItem.kt | 2 +- .../matrix/impl/timeline/RustTimeline.kt | 8 +- .../InvisibleIndicatorPostProcessor.kt | 79 ------------------- .../LastForwardIndicatorsPostProcessor.kt | 76 ++++++++++++++++++ 8 files changed, 119 insertions(+), 101 deletions(-) rename features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/{TimelineItemInvisibleIndicatorModel.kt => TimelineItemLastForwardIndicatorModel.kt} (81%) delete mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/InvisibleIndicatorPostProcessor.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt index df9d355dbf..635cda526e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt @@ -31,7 +31,7 @@ import io.element.android.features.messages.impl.timeline.components.virtual.Tim import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemDaySeparatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemEncryptedHistoryBannerVirtualModel -import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemInvisibleIndicatorModel +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLastForwardIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemRoomBeginningModel @@ -50,12 +50,14 @@ fun TimelineItemVirtualRow( is TimelineItemEncryptedHistoryBannerVirtualModel -> TimelineEncryptedHistoryBannerView() TimelineItemRoomBeginningModel -> TimelineItemRoomBeginningView(roomName = timelineRoomInfo.name) is TimelineItemLoadingIndicatorModel -> { - TimelineLoadingMoreIndicator() + TimelineLoadingMoreIndicator(virtual.model.direction) LaunchedEffect(virtual.model.timestamp) { eventSink(TimelineEvents.LoadMore(virtual.model.direction)) } } - TimelineItemInvisibleIndicatorModel -> Spacer(Modifier) + is TimelineItemLastForwardIndicatorModel -> { + Spacer(modifier = Modifier) + } } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt index cf5c54f3d4..90662957be 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt @@ -17,35 +17,54 @@ package io.element.android.features.messages.impl.timeline.components.virtual import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.LinearProgressIndicator +import io.element.android.libraries.matrix.api.timeline.Timeline @Composable -internal fun TimelineLoadingMoreIndicator(modifier: Modifier = Modifier) { +internal fun TimelineLoadingMoreIndicator( + direction: Timeline.PaginationDirection, + modifier: Modifier = Modifier +) { Box( - modifier = modifier - .fillMaxWidth() - .padding(2.dp), + modifier = modifier.fillMaxWidth(), contentAlignment = Alignment.Center, ) { - LinearProgressIndicator(modifier = Modifier - .height(1.dp) - .fillMaxWidth() - ) + when (direction) { + Timeline.PaginationDirection.FORWARDS -> { + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth() + .padding(top = 2.dp) + .height(1.dp) + ) + } + Timeline.PaginationDirection.BACKWARDS -> { + CircularProgressIndicator( + strokeWidth = 2.dp, + modifier = Modifier.padding(vertical = 8.dp) + ) + } + } + } } @PreviewsDayNight @Composable internal fun TimelineLoadingMoreIndicatorPreview() = ElementPreview { - TimelineLoadingMoreIndicator() + Column { + TimelineLoadingMoreIndicator(Timeline.PaginationDirection.FORWARDS) + TimelineLoadingMoreIndicator(Timeline.PaginationDirection.BACKWARDS) + } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt index e6df9e889d..2fe782b960 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt @@ -18,7 +18,7 @@ package io.element.android.features.messages.impl.timeline.factories.virtual import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemEncryptedHistoryBannerVirtualModel -import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemInvisibleIndicatorModel +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLastForwardIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemRoomBeginningModel @@ -49,7 +49,7 @@ class TimelineItemVirtualFactory @Inject constructor( direction = inner.direction, timestamp = inner.timestamp ) - VirtualTimelineItem.LatestKnownEventIndicator -> TimelineItemInvisibleIndicatorModel + is VirtualTimelineItem.LastForwardIndicator -> TimelineItemLastForwardIndicatorModel } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemInvisibleIndicatorModel.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLastForwardIndicatorModel.kt similarity index 81% rename from features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemInvisibleIndicatorModel.kt rename to features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLastForwardIndicatorModel.kt index 2f4a118746..c532538722 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemInvisibleIndicatorModel.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLastForwardIndicatorModel.kt @@ -16,6 +16,6 @@ package io.element.android.features.messages.impl.timeline.model.virtual -data object TimelineItemInvisibleIndicatorModel : TimelineItemVirtualModel { - override val type: String = "TimelineItemInvisibleIndicatorModel" +data object TimelineItemLastForwardIndicatorModel: TimelineItemVirtualModel { + override val type: String = "TimelineItemLastForwardIndicatorModel" } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt index 2879225553..5963f2c2d0 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt @@ -29,7 +29,7 @@ sealed interface VirtualTimelineItem { data object RoomBeginning: VirtualTimelineItem - data object LatestKnownEventIndicator: VirtualTimelineItem + data object LastForwardIndicator: VirtualTimelineItem data class LoadingIndicator( val direction: Timeline.PaginationDirection, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 1e572d925d..71c331021b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -45,12 +45,11 @@ import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessage import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper -import io.element.android.libraries.matrix.impl.timeline.postprocessor.InvisibleIndicatorPostProcessor +import io.element.android.libraries.matrix.impl.timeline.postprocessor.LastForwardIndicatorsPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.LoadingIndicatorsPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.RoomBeginningPostProcessor import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor import io.element.android.services.toolbox.api.systemclock.SystemClock -import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -116,7 +115,7 @@ class RustTimeline( private val roomBeginningPostProcessor = RoomBeginningPostProcessor() private val loadingIndicatorsPostProcessor = LoadingIndicatorsPostProcessor(systemClock) - private val invisibleIndicatorPostProcessor = InvisibleIndicatorPostProcessor(isLive) + private val lastForwardIndicatorsPostProcessor = LastForwardIndicatorsPostProcessor(isLive) private val timelineItemFactory = MatrixTimelineItemMapper( fetchDetailsForEvent = this::fetchDetailsForEvent, @@ -225,7 +224,8 @@ class RustTimeline( hasMoreToLoadBackwards = hasMoreToLoadBackward ) }.let { items -> loadingIndicatorsPostProcessor.process(items, hasMoreToLoadBackward, hasMoreToLoadForward) } - .let { items -> invisibleIndicatorPostProcessor.process(items) } + // Keep lastForwardIndicatorsPostProcessor last + .let { items -> lastForwardIndicatorsPostProcessor.process(items) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/InvisibleIndicatorPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/InvisibleIndicatorPostProcessor.kt deleted file mode 100644 index 7c7f819ed7..0000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/InvisibleIndicatorPostProcessor.kt +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2024 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.element.android.libraries.matrix.impl.timeline.postprocessor - -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem - -class InvisibleIndicatorPostProcessor( - private val isLive: Boolean, -) { - private val latestEventIdentifiers: MutableSet = HashSet() - - fun process( - items: List, - ): List { - if (isLive) { - return items - } else { - return buildList { - items.forEach { item -> - add(item) - if (item is MatrixTimelineItem.Event) { - if (latestEventIdentifiers.contains(item.uniqueId)) { - add(createLatestKnownEventIndicator(item.uniqueId)) - } - } - } - items.latestEventIdentifier()?.let { latestEventIdentifier -> - if (latestEventIdentifiers.add(latestEventIdentifier)) { - add(createLatestKnownEventIndicator(latestEventIdentifier)) - } - } - } - } - } - - private fun createLatestKnownEventIndicator(identifier: String): MatrixTimelineItem { - return MatrixTimelineItem.Virtual( - uniqueId = "latest_known_event_$identifier", - virtual = VirtualTimelineItem.LatestKnownEventIndicator - ) - } - - private fun List.latestEventIdentifier(): String? { - return findLast { - when (it) { - is MatrixTimelineItem.Event -> true - else -> false - } - }?.let { - (it as MatrixTimelineItem.Event).uniqueId - } - } - - private fun List.indexOf(identifier: String): Int { - return indexOfLast { - when (it) { - is MatrixTimelineItem.Event -> { - it.uniqueId == identifier - } - else -> false - } - } - } -} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt new file mode 100644 index 0000000000..ea7337bd9e --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.timeline.postprocessor + +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem + +/** + * This post processor is responsible for adding virtual items to indicate all the previous last forward item. + */ +class LastForwardIndicatorsPostProcessor( + private val isTimelineLive: Boolean, +) { + + private val lastForwardIdentifiers = LinkedHashSet() + + fun process( + items: List, + ): List { + // If the timeline is live, we don't have any last forward indicator to display + if (isTimelineLive) { + return items + } else { + return buildList { + val latestEventIdentifier = items.latestEventIdentifier() + // Remove if it always exists (this should happen only when no new events are added) + lastForwardIdentifiers.remove(latestEventIdentifier) + + items.forEach { item -> + add(item) + + if (item is MatrixTimelineItem.Event) { + if (lastForwardIdentifiers.contains(item.uniqueId)) { + add(createLastForwardIndicator(item.uniqueId)) + } + } + } + // This is important to always add this one at the end of the list so it's used to keep the scroll position. + add(createLastForwardIndicator(latestEventIdentifier)) + lastForwardIdentifiers.add(latestEventIdentifier) + } + } + } +} + +private fun createLastForwardIndicator(identifier: String): MatrixTimelineItem { + return MatrixTimelineItem.Virtual( + uniqueId = "last_forward_indicator_$identifier", + virtual = VirtualTimelineItem.LastForwardIndicator + ) +} + +private fun List.latestEventIdentifier(): String { + return findLast { + when (it) { + is MatrixTimelineItem.Event -> true + else -> false + } + }?.let { + (it as MatrixTimelineItem.Event).uniqueId + } ?: "fake_id" +} From 1a64901ee04499ead25efb60e86be179760fd467 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 17:59:51 +0200 Subject: [PATCH 171/289] SDK 0.2.16: fix compilation issue --- .../impl/roomlist/RoomListItemExtensions.kt | 2 +- .../impl/timeline/RoomTimelineExtensions.kt | 10 +++++----- .../matrix/impl/timeline/RustMatrixTimeline.kt | 16 +++++++++++----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListItemExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListItemExtensions.kt index 24f292b456..1ab7d9f7d7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListItemExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListItemExtensions.kt @@ -23,7 +23,7 @@ import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter /** Returns a `Room` with an initialized timeline using the given [filter]. */ suspend fun RoomListItem.fullRoomWithTimeline(filter: TimelineEventTypeFilter? = null): Room { if (!isTimelineInitialized()) { - initTimeline(filter) + initTimeline(filter, "live") } return fullRoom() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt index f8109259d5..6dfed57cec 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RoomTimelineExtensions.kt @@ -27,13 +27,13 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.catch -import org.matrix.rustcomponents.sdk.BackPaginationStatusListener +import org.matrix.rustcomponents.sdk.PaginationStatusListener import org.matrix.rustcomponents.sdk.Timeline import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineItem import org.matrix.rustcomponents.sdk.TimelineListener import timber.log.Timber -import uniffi.matrix_sdk_ui.BackPaginationStatus +import uniffi.matrix_sdk_ui.PaginationStatus internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List) -> Unit): Flow> = callbackFlow { @@ -58,10 +58,10 @@ internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List = +internal fun Timeline.backPaginationStatusFlow(): Flow = mxCallbackFlow { - val listener = object : BackPaginationStatusListener { - override fun onUpdate(status: BackPaginationStatus) { + val listener = object : PaginationStatusListener { + override fun onUpdate(status: PaginationStatus) { trySendBlocking(status) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt index b507690a4a..b16ff817e3 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt @@ -50,8 +50,8 @@ import org.matrix.rustcomponents.sdk.Timeline import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineItem import timber.log.Timber -import uniffi.matrix_sdk_ui.BackPaginationStatus import uniffi.matrix_sdk_ui.EventItemOrigin +import uniffi.matrix_sdk_ui.PaginationStatus import java.util.Date import java.util.concurrent.atomic.AtomicBoolean @@ -152,21 +152,21 @@ class RustMatrixTimeline( ) } when (paginationStatus) { - BackPaginationStatus.IDLE -> { + PaginationStatus.IDLE -> { MatrixTimeline.PaginationState( isBackPaginating = false, hasMoreToLoadBackwards = true, beginningOfRoomReached = false, ) } - BackPaginationStatus.PAGINATING -> { + PaginationStatus.PAGINATING -> { MatrixTimeline.PaginationState( isBackPaginating = true, hasMoreToLoadBackwards = true, beginningOfRoomReached = false, ) } - BackPaginationStatus.TIMELINE_START_REACHED -> { + PaginationStatus.TIMELINE_END_REACHED -> { MatrixTimeline.PaginationState( isBackPaginating = false, hasMoreToLoadBackwards = false, @@ -229,7 +229,13 @@ class RustMatrixTimeline( runCatching { if (!canBackPaginate()) throw TimelineException.CannotPaginate Timber.v("Start back paginating for room ${matrixRoom.roomId} ") - innerTimeline.paginateBackwards(paginationOptions) + innerTimeline.paginateBackwards( + when (paginationOptions) { + is PaginationOptions.SimpleRequest -> paginationOptions.eventLimit + is PaginationOptions.UntilNumItems -> paginationOptions.eventLimit + } + ) + Unit }.onFailure { error -> if (error is TimelineException.CannotPaginate) { Timber.d("Can't paginate backwards on room ${matrixRoom.roomId}, we're already at the start") From 93709f33b81060746ef5e16bc71552cfdc53496b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 09:17:22 +0200 Subject: [PATCH 172/289] Fix false positive A single Unit expression is unnecessary and can safely be removed. [OptionalUnit] --- .../libraries/matrix/impl/timeline/RustMatrixTimeline.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt index b16ff817e3..68043f2565 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustMatrixTimeline.kt @@ -235,7 +235,6 @@ class RustMatrixTimeline( is PaginationOptions.UntilNumItems -> paginationOptions.eventLimit } ) - Unit }.onFailure { error -> if (error is TimelineException.CannotPaginate) { Timber.d("Can't paginate backwards on room ${matrixRoom.roomId}, we're already at the start") @@ -244,7 +243,7 @@ class RustMatrixTimeline( } }.onSuccess { Timber.v("Success back paginating for room ${matrixRoom.roomId}") - } + }.map { } } private fun canBackPaginate(): Boolean { From 42b9c35adb6ba787a9eb2abcbb139c9b15a4fb5a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 09:22:08 +0200 Subject: [PATCH 173/289] Fix test on UtdTrackerTest --- .../matrix/impl/analytics/UtdTrackerTest.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTrackerTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTrackerTest.kt index 18ccdbb3e8..f43142900b 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTrackerTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTrackerTest.kt @@ -22,13 +22,20 @@ import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.services.analytics.test.FakeAnalyticsService import org.junit.Test import org.matrix.rustcomponents.sdk.UnableToDecryptInfo +import uniffi.matrix_sdk_crypto.UtdCause class UtdTrackerTest { @Test fun `when onUtd is called with null timeToDecryptMs, the expected analytics Event is sent`() { val fakeAnalyticsService = FakeAnalyticsService() val sut = UtdTracker(fakeAnalyticsService) - sut.onUtd(UnableToDecryptInfo(eventId = AN_EVENT_ID.value, timeToDecryptMs = null)) + sut.onUtd( + UnableToDecryptInfo( + eventId = AN_EVENT_ID.value, + timeToDecryptMs = null, + cause = UtdCause.UNKNOWN, + ) + ) assertThat(fakeAnalyticsService.capturedEvents).containsExactly( Error( context = null, @@ -47,7 +54,13 @@ class UtdTrackerTest { fun `when onUtd is called with timeToDecryptMs, the expected analytics Event is sent`() { val fakeAnalyticsService = FakeAnalyticsService() val sut = UtdTracker(fakeAnalyticsService) - sut.onUtd(UnableToDecryptInfo(eventId = AN_EVENT_ID.value, timeToDecryptMs = 123.toULong())) + sut.onUtd( + UnableToDecryptInfo( + eventId = AN_EVENT_ID.value, + timeToDecryptMs = 123.toULong(), + cause = UtdCause.UNKNOWN, + ) + ) assertThat(fakeAnalyticsService.capturedEvents).containsExactly( Error( context = null, From d63c366596d640a1ac76b236df55fb04041dc309 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 12:17:50 +0200 Subject: [PATCH 174/289] Fix potential infinite loading at first startup. --- gradle/libs.versions.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 86910e348a..e801182336 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,12 @@ firebaseAppDistribution = "4.2.0" # AndroidX core = "1.13.0" -datastore = "1.1.0" +# Warning: there is an issue with 1.1.0, that I cannot repro on unit test. +# To repro with the application: +# Clear the cache of the application and run the app. Nearly each time, there is an infinite loading +# Due to the DefaultMigrationStore not bahaving as expected. +# Stick to 1.0.0 for now, and ensure that this scenario cannot be reproduced when upgrading the version. +datastore = "1.0.0" constraintlayout = "2.1.4" constraintlayout_compose = "1.0.1" lifecycle = "2.7.0" From e3eab89fd2f940c42fe65b3ff25148acf530edc2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Apr 2024 10:18:41 +0000 Subject: [PATCH 175/289] Update dependency com.google.testparameterinjector:test-parameter-injector to v1.16 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d68e9f1f61..3f877b3e05 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -135,7 +135,7 @@ test_mockk = "io.mockk:mockk:1.13.10" test_konsist = "com.lemonappdev:konsist:0.13.0" test_turbine = "app.cash.turbine:turbine:1.1.0" test_truth = "com.google.truth:truth:1.4.2" -test_parameter_injector = "com.google.testparameterinjector:test-parameter-injector:1.15" +test_parameter_injector = "com.google.testparameterinjector:test-parameter-injector:1.16" test_robolectric = "org.robolectric:robolectric:4.12.1" test_appyx_junit = { module = "com.bumble.appyx:testing-junit4", version.ref = "appyx" } From c1c3227bde3e8bf3ccc00e8801921426b45a8cac Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 12:28:24 +0200 Subject: [PATCH 176/289] Let the SDK manage the file log cleanup, and keep one week of log. --- .../x/initializer/TracingInitializer.kt | 6 +++-- .../rageshake/api/reporter/BugReporter.kt | 5 ---- .../impl/reporter/DefaultBugReporter.kt | 23 ------------------- .../impl/bugreport/FakeBugReporter.kt | 4 ---- .../impl/reporter/DefaultBugReporterTest.kt | 3 --- .../api/tracing/WriteToFilesConfiguration.kt | 7 +++++- .../matrix/impl/tracing/RustTracingService.kt | 22 ++++++++++-------- 7 files changed, 23 insertions(+), 47 deletions(-) diff --git a/app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt index 7afcc49e6d..e037d2978f 100644 --- a/app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt +++ b/app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt @@ -56,11 +56,13 @@ class TracingInitializer : Initializer { writesToLogcat = false, writesToFilesConfiguration = WriteToFilesConfiguration.Enabled( directory = bugReporter.logDirectory().absolutePath, - filenamePrefix = "logs" + filenamePrefix = "logs", + filenameSuffix = null, + // Keep a minimum of 1 week of log files. + numberOfFiles = 7 * 24, ) ) } - bugReporter.cleanLogDirectoryIfNeeded() bugReporter.setCurrentTracingFilter(tracingConfiguration.filterConfiguration.filter) tracingService.setupTracing(tracingConfiguration) // Also set env variable for rust back trace diff --git a/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/reporter/BugReporter.kt b/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/reporter/BugReporter.kt index d8e05f947b..4f48871666 100644 --- a/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/reporter/BugReporter.kt +++ b/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/reporter/BugReporter.kt @@ -38,11 +38,6 @@ interface BugReporter { listener: BugReporterListener? ) - /** - * Clean the log files if needed to avoid wasting disk space. - */ - fun cleanLogDirectoryIfNeeded() - /** * Provide the log directory. */ diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt index 15a0adcf17..f81a755bd0 100755 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt @@ -18,7 +18,6 @@ package io.element.android.features.rageshake.impl.reporter import android.content.Context import android.os.Build -import android.text.format.DateUtils.DAY_IN_MILLIS import androidx.core.net.toFile import androidx.core.net.toUri import com.squareup.anvil.annotations.ContributesBinding @@ -39,11 +38,8 @@ import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.SdkMetadata import io.element.android.libraries.network.useragent.UserAgentProvider import io.element.android.libraries.sessionstorage.api.SessionStore -import io.element.android.services.toolbox.api.systemclock.SystemClock import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.first -import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import okhttp3.Call import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -75,8 +71,6 @@ class DefaultBugReporter @Inject constructor( @ApplicationContext private val context: Context, private val screenshotHolder: ScreenshotHolder, private val crashDataStore: CrashDataStore, - private val coroutineScope: CoroutineScope, - private val systemClock: SystemClock, private val coroutineDispatchers: CoroutineDispatchers, private val okHttpClient: Provider, private val userAgentProvider: UserAgentProvider, @@ -339,13 +333,6 @@ class DefaultBugReporter @Inject constructor( } } - override fun cleanLogDirectoryIfNeeded() { - coroutineScope.launch(coroutineDispatchers.io) { - // delete the log files older than 1 day, except the most recent one - deleteOldLogFiles(systemClock.epochMillis() - DAY_IN_MILLIS) - } - } - suspend fun deleteAllFiles() { withContext(coroutineDispatchers.io) { getLogFiles().forEach { it.safeDelete() } @@ -368,16 +355,6 @@ class DefaultBugReporter @Inject constructor( }.orEmpty() } - /** - * Delete the log files older than the given time except the most recent one. - * @param time the time in ms - */ - private fun deleteOldLogFiles(time: Long) { - val logFiles = getLogFiles() - val oldLogFiles = logFiles.filter { it.lastModified() < time } - oldLogFiles.deleteAllExceptMostRecent() - } - /** * Delete all the log files except the most recent one. */ diff --git a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/bugreport/FakeBugReporter.kt b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/bugreport/FakeBugReporter.kt index 0a67a79f57..cce2d5d144 100644 --- a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/bugreport/FakeBugReporter.kt +++ b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/bugreport/FakeBugReporter.kt @@ -52,10 +52,6 @@ class FakeBugReporter(val mode: FakeBugReporterMode = FakeBugReporterMode.Succes listener?.onUploadSucceed() } - override fun cleanLogDirectoryIfNeeded() { - // No op - } - override fun logDirectory(): File { return File("fake") } diff --git a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt index 8d48220ab5..9d165ea844 100755 --- a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt +++ b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt @@ -24,7 +24,6 @@ import io.element.android.libraries.matrix.test.FakeSdkMetadata import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.network.useragent.DefaultUserAgentProvider import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore -import io.element.android.services.toolbox.test.systemclock.FakeSystemClock import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest @@ -144,8 +143,6 @@ class DefaultBugReporterTest { context = RuntimeEnvironment.getApplication(), screenshotHolder = FakeScreenshotHolder(), crashDataStore = FakeCrashDataStore(), - coroutineScope = this, - systemClock = FakeSystemClock(), coroutineDispatchers = testCoroutineDispatchers(), okHttpClient = { OkHttpClient.Builder().build() }, userAgentProvider = DefaultUserAgentProvider(buildMeta, FakeSdkMetadata("123456789")), diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/tracing/WriteToFilesConfiguration.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/tracing/WriteToFilesConfiguration.kt index 27b378846d..b814bdd5c4 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/tracing/WriteToFilesConfiguration.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/tracing/WriteToFilesConfiguration.kt @@ -18,5 +18,10 @@ package io.element.android.libraries.matrix.api.tracing sealed interface WriteToFilesConfiguration { data object Disabled : WriteToFilesConfiguration - data class Enabled(val directory: String, val filenamePrefix: String) : WriteToFilesConfiguration + data class Enabled( + val directory: String, + val filenamePrefix: String, + val filenameSuffix: String?, + val numberOfFiles: Int?, + ) : WriteToFilesConfiguration } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt index c67cd600e6..c22b57f05e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt @@ -33,15 +33,7 @@ class RustTracingService @Inject constructor(private val buildMeta: BuildMeta) : val rustTracingConfiguration = org.matrix.rustcomponents.sdk.TracingConfiguration( filter = tracingConfiguration.filterConfiguration.filter, writeToStdoutOrSystem = tracingConfiguration.writesToLogcat, - writeToFiles = when (val writeToFilesConfiguration = tracingConfiguration.writesToFilesConfiguration) { - is WriteToFilesConfiguration.Disabled -> null - is WriteToFilesConfiguration.Enabled -> TracingFileConfiguration( - path = writeToFilesConfiguration.directory, - filePrefix = writeToFilesConfiguration.filenamePrefix, - fileSuffix = null, - maxFiles = null, - ) - }, + writeToFiles = tracingConfiguration.writesToFilesConfiguration.toTracingFileConfiguration(), ) org.matrix.rustcomponents.sdk.setupTracing(rustTracingConfiguration) Timber.v("Tracing config filter = $filter: ${filter.filter}") @@ -51,3 +43,15 @@ class RustTracingService @Inject constructor(private val buildMeta: BuildMeta) : return RustTracingTree(retrieveFromStackTrace = buildMeta.isDebuggable) } } + +private fun WriteToFilesConfiguration.toTracingFileConfiguration(): TracingFileConfiguration? { + return when (this) { + is WriteToFilesConfiguration.Disabled -> null + is WriteToFilesConfiguration.Enabled -> TracingFileConfiguration( + path = directory, + filePrefix = filenamePrefix, + fileSuffix = filenameSuffix, + maxFiles = numberOfFiles?.toULong(), + ) + } +} From 1a2a9ac058fc1b7a2c169f7f96cbe5098db13631 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 12:36:21 +0200 Subject: [PATCH 177/289] Changelog --- changelog.d/2758.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2758.misc diff --git a/changelog.d/2758.misc b/changelog.d/2758.misc new file mode 100644 index 0000000000..1e3d894f79 --- /dev/null +++ b/changelog.d/2758.misc @@ -0,0 +1 @@ + Let the SDK manage the file log cleanup, and keep one week of log. From 56257bd1d33872adadc1ea641181e0db38593d06 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 12:45:26 +0200 Subject: [PATCH 178/289] Stop using deprecated `TestParameter.TestParameterValuesProvider` --- tests/uitests/src/test/kotlin/ui/PreviewProvider.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/uitests/src/test/kotlin/ui/PreviewProvider.kt b/tests/uitests/src/test/kotlin/ui/PreviewProvider.kt index 6f972c8116..c316dd8318 100644 --- a/tests/uitests/src/test/kotlin/ui/PreviewProvider.kt +++ b/tests/uitests/src/test/kotlin/ui/PreviewProvider.kt @@ -17,10 +17,10 @@ package ui import com.airbnb.android.showkase.models.Showkase -import com.google.testing.junit.testparameterinjector.TestParameter +import com.google.testing.junit.testparameterinjector.TestParameterValuesProvider -object PreviewProvider : TestParameter.TestParameterValuesProvider { - override fun provideValues(): List { +object PreviewProvider : TestParameterValuesProvider() { + override fun provideValues(context: Context): List { val metadata = Showkase.getMetadata() val components = metadata.componentList.map(::ComponentTestPreview) val colors = metadata.colorList.map(::ColorTestPreview) From 94df7308ab1ff90c5b3f7856cf6b2b4b53860a29 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 12:55:08 +0200 Subject: [PATCH 179/289] Fix compilation issue (develop has been merged here) --- .../android/libraries/matrix/impl/timeline/RustTimeline.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 71c331021b..6b73bb3272 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -181,7 +181,7 @@ class RustTimeline( updatePaginationStatus(direction) { it.copy(isPaginating = true) } when (direction) { Timeline.PaginationDirection.BACKWARDS -> inner.paginateBackwards(PAGINATION_SIZE.toUShort()) - Timeline.PaginationDirection.FORWARDS -> inner.paginateForwards(PAGINATION_SIZE.toUShort()) + Timeline.PaginationDirection.FORWARDS -> inner.focusedPaginateForwards(PAGINATION_SIZE.toUShort()) } }.onFailure { error -> updatePaginationStatus(direction) { it.copy(isPaginating = false) } From 300d3e34b1e0ec02b0930a026b40d086c0618aff Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 13:57:08 +0200 Subject: [PATCH 180/289] Format and cleanup files --- .../messages/impl/MessagesFlowNode.kt | 2 +- .../impl/forward/ForwardMessagesPresenter.kt | 1 - .../impl/timeline/TimelineController.kt | 1 - .../messages/impl/timeline/TimelineEvents.kt | 2 +- .../impl/timeline/TimelineItemIndexer.kt | 1 - .../messages/impl/timeline/TimelineState.kt | 8 +- .../impl/timeline/TimelineStateProvider.kt | 1 - .../messages/impl/timeline/TimelineView.kt | 4 +- .../timeline/components/TimelineItemRow.kt | 1 - .../virtual/TimelineLoadingMoreIndicator.kt | 1 - .../factories/TimelineItemsFactory.kt | 1 - .../TimelineItemLastForwardIndicatorModel.kt | 2 +- .../MessageComposerPresenterTest.kt | 7 +- .../impl/timeline/TimelinePresenterTest.kt | 2 - .../poll/impl/history/PollHistoryPresenter.kt | 2 - .../impl/history/PollHistoryPresenterTest.kt | 9 +- .../designsystem/theme/ColorAliases.kt | 1 - .../libraries/matrix/api/room/MatrixRoom.kt | 3 +- .../libraries/matrix/api/timeline/Timeline.kt | 4 - .../matrix/api/timeline/TimelineProvider.kt | 3 - .../item/virtual/VirtualTimelineItem.kt | 6 +- .../matrix/impl/room/RustMatrixRoom.kt | 26 +- .../matrix/impl/timeline/RustTimeline.kt | 14 +- .../LastForwardIndicatorsPostProcessor.kt | 1 - .../LoadingIndicatorsPostProcessor.kt | 1 - .../RoomBeginningPostProcessor.kt | 3 - .../matrix/test/timeline/FakeTimeline.kt | 239 +++++++++++++++--- 27 files changed, 235 insertions(+), 111 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt index c77907a855..ca35ac7fee 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt @@ -99,7 +99,7 @@ class MessagesFlowNode @AssistedInject constructor( data object Empty : NavTarget @Parcelize - data object Messages: NavTarget + data object Messages : NavTarget @Parcelize data class MediaViewer( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt index a2212b69f3..9cfdbcd14d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt @@ -29,7 +29,6 @@ import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.TimelineProvider import io.element.android.libraries.matrix.api.timeline.getActiveTimeline import kotlinx.collections.immutable.ImmutableList diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index c4d794b7c4..c7bd1b9b63 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -53,7 +53,6 @@ import kotlin.coroutines.cancellation.CancellationException class TimelineController @Inject constructor( private val room: MatrixRoom, ) : Closeable, TimelineProvider { - private val coroutineScope = CoroutineScope(SupervisorJob()) private val liveTimeline = MutableStateFlow(room.liveTimeline) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt index 2edd14b160..8a5d3cd275 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineEvents.kt @@ -22,7 +22,7 @@ import io.element.android.libraries.matrix.api.timeline.Timeline sealed interface TimelineEvents { data class OnScrollFinished(val firstIndex: Int) : TimelineEvents data class FocusOnEvent(val eventId: EventId) : TimelineEvents - data object ClearFocusRequestState: TimelineEvents + data object ClearFocusRequestState : TimelineEvents data object JumpToLive : TimelineEvents /** diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt index 4507dea99d..d11de93079 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt @@ -25,7 +25,6 @@ import javax.inject.Inject @SingleIn(RoomScope::class) class TimelineItemIndexer @Inject constructor() { - private val timelineEventsIndexes = mutableMapOf() fun isKnown(eventId: EventId): Boolean { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt index 67a7dac574..592af0693d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt @@ -29,18 +29,18 @@ data class TimelineState( val renderReadReceipts: Boolean, val newEventState: NewEventState, val isLive: Boolean, - val focusedEventId : EventId?, + val focusedEventId: EventId?, val focusRequestState: FocusRequestState, val eventSink: (TimelineEvents) -> Unit, -){ +) { val hasAnyEvent = timelineItems.any { it is TimelineItem.Event } } sealed interface FocusRequestState { data object None : FocusRequestState - data class Cached(val index: Int): FocusRequestState + data class Cached(val index: Int) : FocusRequestState data object Fetching : FocusRequestState - data object Fetched: FocusRequestState + data object Fetched : FocusRequestState data class Failure(val throwable: Throwable) : FocusRequestState } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index 3002c51d78..b5dff2b54e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -71,7 +71,6 @@ fun aPaginationStatus( ) } - internal fun aTimelineItemList(content: TimelineItemEventContent): ImmutableList { return persistentListOf( // 3 items (First Middle Last) with isMine = false diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 101ad58703..de8d198fd3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -93,7 +93,6 @@ fun TimelineView( modifier: Modifier = Modifier, forceJumpToBottomVisibility: Boolean = false ) { - fun clearFocusRequestState() { state.eventSink(TimelineEvents.ClearFocusRequestState) } @@ -124,8 +123,7 @@ fun TimelineView( reverseLayout = useReverseLayout, contentPadding = PaddingValues(vertical = 8.dp), ) { - - if(state.isLive) { + if (state.isLive) { item { TypingNotificationView(state = typingNotificationState) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index 4782ff21f1..b54e0a51ac 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -57,7 +57,6 @@ internal fun TimelineItemRow( eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit, modifier: Modifier = Modifier ) { - val backgroundModifier = if (timelineItem.isEvent(focusedEventId)) { Modifier.focusedEvent() } else { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt index 90662957be..0af4f600ee 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt @@ -56,7 +56,6 @@ internal fun TimelineLoadingMoreIndicator( ) } } - } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt index ac9803506c..8b5b644a23 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt @@ -34,7 +34,6 @@ import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLastForwardIndicatorModel.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLastForwardIndicatorModel.kt index c532538722..b0b6376f50 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLastForwardIndicatorModel.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/virtual/TimelineItemLastForwardIndicatorModel.kt @@ -16,6 +16,6 @@ package io.element.android.features.messages.impl.timeline.model.virtual -data object TimelineItemLastForwardIndicatorModel: TimelineItemVirtualModel { +data object TimelineItemLastForwardIndicatorModel : TimelineItemVirtualModel { override val type: String = "TimelineItemLastForwardIndicatorModel" } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt index c30d427239..0e83aa84ec 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt @@ -365,7 +365,7 @@ class MessageComposerPresenterTest { @Test fun `present - reply message`() = runTest { - val replyMessageLambda = lambdaRecorder {_: EventId, _: String, _: String?, _:List -> + val replyMessageLambda = lambdaRecorder { _: EventId, _: String, _: String?, _: List -> Result.success(Unit) } val timeline = FakeTimeline().apply { @@ -396,7 +396,7 @@ class MessageComposerPresenterTest { assert(replyMessageLambda) .isCalledOnce() - .with(any(),value(A_REPLY),value(A_REPLY),any()) + .with(any(), value(A_REPLY), value(A_REPLY), any()) assertThat(analyticsService.capturedEvents).containsExactly( Composer( @@ -873,7 +873,7 @@ class MessageComposerPresenterTest { @OptIn(ExperimentalCoroutinesApi::class) @Test fun `present - send messages with intentional mentions`() = runTest { - val replyMessageLambda = lambdaRecorder {_: EventId, _: String, _: String?, _:List -> + val replyMessageLambda = lambdaRecorder { _: EventId, _: String, _: String?, _: List -> Result.success(Unit) } val editMessageLambda = lambdaRecorder { _: EventId?, _: TransactionId?, _: String, _: String?, _: List -> @@ -940,7 +940,6 @@ class MessageComposerPresenterTest { .isCalledOnce() .with(any(), any(), any(), any(), value(listOf(Mention.User(A_USER_ID_3)))) - skipItems(1) } } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt index 3dd00021fe..2161b11a5b 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt @@ -33,7 +33,6 @@ import io.element.android.features.poll.api.actions.EndPollAction import io.element.android.features.poll.api.actions.SendPollResponseAction import io.element.android.features.poll.test.actions.FakeEndPollAction import io.element.android.features.poll.test.actions.FakeSendPollResponseAction -import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState @@ -69,7 +68,6 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.advanceTimeBy import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt index 7a3b3f8232..981fe00c32 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt @@ -32,11 +32,9 @@ import io.element.android.features.poll.impl.history.model.PollHistoryFilter import io.element.android.features.poll.impl.history.model.PollHistoryItems import io.element.android.features.poll.impl.history.model.PollHistoryItemsFactory import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.TimelineProvider import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.flatMapConcat import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt index 07f71f51d3..f07a2ce16a 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt @@ -61,9 +61,10 @@ class PollHistoryPresenterTest { private val timeline = FakeTimeline( timelineItems = aPollTimelineItems( mapOf( - AN_EVENT_ID to anOngoingPollContent(), - AN_EVENT_ID_2 to anEndedPollContent() - )), + AN_EVENT_ID to anOngoingPollContent(), + AN_EVENT_ID_2 to anEndedPollContent() + ) + ), backwardPaginationStatus = backwardPaginationStatus ) private val room = FakeMatrixRoom( @@ -136,7 +137,7 @@ class PollHistoryPresenterTest { @Test fun `present - load more scenario`() = runTest { - val paginateLambda = lambdaRecorder{ _: Timeline.PaginationDirection -> + val paginateLambda = lambdaRecorder { _: Timeline.PaginationDirection -> Result.success(false) } timeline.apply { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 1fedcceedd..1cd67e15f7 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -153,7 +153,6 @@ val SemanticColors.bigCheckmarkBorderColor val SemanticColors.highlightedMessageBackgroundColor get() = if (isLight) LightColorTokens.colorGreen300 else DarkColorTokens.colorGreen300 - @PreviewsDayNight @Composable internal fun ColorAliasesPreview() = ElementPreview { diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 1e9b926aaf..ad27a0eb36 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -32,9 +32,8 @@ import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange -import io.element.android.libraries.matrix.api.timeline.TimelineProvider -import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.ReceiptType +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings import kotlinx.coroutines.flow.Flow diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt index c15c4b323f..6d0850db83 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/Timeline.kt @@ -33,7 +33,6 @@ import kotlinx.coroutines.flow.StateFlow import java.io.File interface Timeline : AutoCloseable { - data class PaginationStatus( val isPaginating: Boolean, val hasMoreToLoad: Boolean, @@ -52,7 +51,6 @@ interface Timeline : AutoCloseable { fun paginationStatus(direction: PaginationDirection): StateFlow val timelineItems: Flow> - suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result suspend fun editMessage(originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List): Result @@ -164,6 +162,4 @@ interface Timeline : AutoCloseable { waveform: List, progressCallback: ProgressCallback? ): Result - - } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt index 5b55b8dc47..f8e0965c7a 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt @@ -19,11 +19,9 @@ package io.element.android.libraries.matrix.api.timeline import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.room.MatrixRoom -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.first -import kotlinx.coroutines.flow.flowOf import javax.inject.Inject /** @@ -45,4 +43,3 @@ class LiveTimelineProvider @Inject constructor( ) : TimelineProvider { override fun activeTimelineFlow(): StateFlow = MutableStateFlow(room.liveTimeline) } - diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt index 5963f2c2d0..13ecad636b 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/virtual/VirtualTimelineItem.kt @@ -27,12 +27,12 @@ sealed interface VirtualTimelineItem { data object EncryptedHistoryBanner : VirtualTimelineItem - data object RoomBeginning: VirtualTimelineItem + data object RoomBeginning : VirtualTimelineItem - data object LastForwardIndicator: VirtualTimelineItem + data object LastForwardIndicator : VirtualTimelineItem data class LoadingIndicator( val direction: Timeline.PaginationDirection, val timestamp: Long, - ): VirtualTimelineItem + ) : VirtualTimelineItem } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index c99c9a8c21..0043d52545 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -47,7 +47,6 @@ import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings -import io.element.android.libraries.matrix.impl.media.MediaUploadHandlerImpl import io.element.android.libraries.matrix.impl.notificationsettings.RustNotificationSettingsService import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper @@ -78,14 +77,10 @@ import kotlinx.coroutines.withContext import org.matrix.rustcomponents.sdk.RoomInfo import org.matrix.rustcomponents.sdk.RoomInfoListener import org.matrix.rustcomponents.sdk.RoomListItem -import org.matrix.rustcomponents.sdk.RoomMessageEventContentWithoutRelation -import org.matrix.rustcomponents.sdk.SendAttachmentJoinHandle import org.matrix.rustcomponents.sdk.TypingNotificationsListener import org.matrix.rustcomponents.sdk.UserPowerLevelUpdate import org.matrix.rustcomponents.sdk.WidgetCapabilities import org.matrix.rustcomponents.sdk.WidgetCapabilitiesProvider -import org.matrix.rustcomponents.sdk.messageEventContentFromHtml -import org.matrix.rustcomponents.sdk.messageEventContentFromMarkdown import org.matrix.rustcomponents.sdk.use import uniffi.matrix_sdk.RoomPowerLevelChanges import java.io.File @@ -151,7 +146,7 @@ class RustMatrixRoom( private val _roomNotificationSettingsStateFlow = MutableStateFlow(MatrixRoomNotificationSettingsState.Unknown) override val roomNotificationSettingsStateFlow: StateFlow = _roomNotificationSettingsStateFlow - override val liveTimeline = createTimeline(innerTimeline, isLive = true){ + override val liveTimeline = createTimeline(innerTimeline, isLive = true) { _syncUpdateFlow.value = systemClock.epochMillis() } @@ -179,7 +174,7 @@ class RustMatrixRoom( eventId = eventId.value, numContextEvents = 50u, internalIdPrefix = "focus_$eventId", - ).let {inner -> + ).let { inner -> createTimeline(inner, isLive = false) } } @@ -322,7 +317,7 @@ class RustMatrixRoom( } } - override suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result { + override suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result { return liveTimeline.sendMessage(body, htmlBody, mentions) } @@ -340,7 +335,7 @@ class RustMatrixRoom( return liveTimeline.enterSpecialMode(eventId) } - override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result{ + override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result { return liveTimeline.replyMessage(eventId, body, htmlBody, mentions) } @@ -446,11 +441,11 @@ class RustMatrixRoom( return liveTimeline.sendFile(file, fileInfo, progressCallback) } - override suspend fun toggleReaction(emoji: String, eventId: EventId): Result{ + override suspend fun toggleReaction(emoji: String, eventId: EventId): Result { return liveTimeline.toggleReaction(emoji, eventId) } - override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result{ + override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result { return liveTimeline.forwardEvent(eventId, roomIds) } @@ -458,7 +453,7 @@ class RustMatrixRoom( return liveTimeline.retrySendMessage(transactionId) } - override suspend fun cancelSend(transactionId: TransactionId): Result{ + override suspend fun cancelSend(transactionId: TransactionId): Result { return liveTimeline.cancelSend(transactionId) } @@ -563,14 +558,14 @@ class RustMatrixRoom( override suspend fun sendPollResponse( pollStartId: EventId, answers: List - ): Result { + ): Result { return liveTimeline.sendPollResponse(pollStartId, answers) } override suspend fun endPoll( pollStartId: EventId, text: String - ): Result { + ): Result { return liveTimeline.endPoll(pollStartId, text) } @@ -579,7 +574,7 @@ class RustMatrixRoom( audioInfo: AudioInfo, waveform: List, progressCallback: ProgressCallback?, - ): Result{ + ): Result { return liveTimeline.sendVoiceMessage(file, audioInfo, waveform, progressCallback) } @@ -634,5 +629,4 @@ class RustMatrixRoom( inner = timeline, ) } - } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 6b73bb3272..4f67f00e57 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -89,17 +89,16 @@ private const val PAGINATION_SIZE = 50 class RustTimeline( private val inner: InnerTimeline, - private val isLive: Boolean, - private val systemClock: SystemClock, - private val roomCoroutineScope: CoroutineScope, - private val isKeyBackupEnabled: Boolean, + isLive: Boolean, + systemClock: SystemClock, + roomCoroutineScope: CoroutineScope, + isKeyBackupEnabled: Boolean, private val matrixRoom: MatrixRoom, private val dispatcher: CoroutineDispatcher, - private val lastLoginTimestamp: Date?, + lastLoginTimestamp: Date?, private val roomContentForwarder: RoomContentForwarder, private val onNewSyncedEvent: () -> Unit, ) : Timeline { - private val initLatch = CompletableDeferred() private val isInit = AtomicBoolean(false) @@ -173,7 +172,7 @@ class RustTimeline( } } - // Use NonCancellable to avoid breaking the timeline when the coroutine is cancelled. + // Use NonCancellable to avoid breaking the timeline when the coroutine is cancelled. override suspend fun paginate(direction: Timeline.PaginationDirection): Result = withContext(NonCancellable) { initLatch.await() runCatching { @@ -226,7 +225,6 @@ class RustTimeline( }.let { items -> loadingIndicatorsPostProcessor.process(items, hasMoreToLoadBackward, hasMoreToLoadForward) } // Keep lastForwardIndicatorsPostProcessor last .let { items -> lastForwardIndicatorsPostProcessor.process(items) } - } override fun close() { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt index ea7337bd9e..8db3952f0d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt @@ -25,7 +25,6 @@ import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTime class LastForwardIndicatorsPostProcessor( private val isTimelineLive: Boolean, ) { - private val lastForwardIdentifiers = LinkedHashSet() fun process( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt index c2db96730b..7e24f89c1c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LoadingIndicatorsPostProcessor.kt @@ -22,7 +22,6 @@ import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTime import io.element.android.services.toolbox.api.systemclock.SystemClock class LoadingIndicatorsPostProcessor(private val systemClock: SystemClock) { - fun process( items: List, hasMoreToLoadBackward: Boolean, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt index da8392a452..e3fa9c8072 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt @@ -29,7 +29,6 @@ import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTime * or add the RoomBeginning item for non DM room. */ class RoomBeginningPostProcessor { - fun process( items: List, isDm: Boolean, @@ -49,7 +48,6 @@ class RoomBeginningPostProcessor { } private fun processForDM(items: List): List { - // Find room creation event. This is usually index 0 val roomCreationEventIndex = items.indexOfFirst { val stateEventContent = (it as? MatrixTimelineItem.Event)?.event?.content as? StateContent @@ -83,5 +81,4 @@ class RoomBeginningPostProcessor { virtual = VirtualTimelineItem.RoomBeginning ) } - } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt index 5663ad6b5b..c99698fcb4 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt @@ -32,7 +32,6 @@ import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.ReceiptType import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler -import io.element.android.tests.testutils.simulateLongTask import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -55,14 +54,37 @@ class FakeTimeline( ), override val membershipChangeEventReceived: Flow = MutableSharedFlow(), ) : Timeline { + var sendMessageLambda: ( + body: String, + htmlBody: String?, + mentions: List, + ) -> Result = { _, _, _ -> + Result.success(Unit) + } - var sendMessageLambda: (body: String, htmlBody: String?, mentions: List) -> Result = { _, _, _ -> Result.success(Unit) } - override suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result = sendMessageLambda(body, htmlBody, mentions) + override suspend fun sendMessage( + body: String, + htmlBody: String?, + mentions: List, + ): Result = sendMessageLambda(body, htmlBody, mentions) - var editMessageLambda: (originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List) -> Result = - { _, _, _, _, _ -> Result.success(Unit) } + var editMessageLambda: ( + originalEventId: EventId?, + transactionId: TransactionId?, + body: String, + htmlBody: String?, + mentions: List, + ) -> Result = { _, _, _, _, _ -> + Result.success(Unit) + } - override suspend fun editMessage(originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List): Result = editMessageLambda( + override suspend fun editMessage( + originalEventId: EventId?, + transactionId: TransactionId?, + body: String, + htmlBody: String?, + mentions: List, + ): Result = editMessageLambda( originalEventId, transactionId, body, @@ -70,23 +92,52 @@ class FakeTimeline( mentions ) - var enterSpecialModeLambda: (eventId: EventId?) -> Result = { Result.success(Unit) } + var enterSpecialModeLambda: (eventId: EventId?) -> Result = { + Result.success(Unit) + } + override suspend fun enterSpecialMode(eventId: EventId?): Result = enterSpecialModeLambda(eventId) - var replyMessageLambda: (eventId: EventId, body: String, htmlBody: String?, mentions: List) -> Result = - { _, _, _, _ -> Result.success(Unit) } + var replyMessageLambda: ( + eventId: EventId, + body: String, + htmlBody: String?, + mentions: List, + ) -> Result = { _, _, _, _ -> + Result.success(Unit) + } - override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result = replyMessageLambda( + override suspend fun replyMessage( + eventId: EventId, + body: String, + htmlBody: String?, + mentions: List, + ): Result = replyMessageLambda( eventId, body, htmlBody, mentions ) - var sendImageLambda: (file: File, thumbnailFile: File?, imageInfo: ImageInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?) -> Result = - { _, _, _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } + var sendImageLambda: ( + file: File, + thumbnailFile: File?, + imageInfo: ImageInfo, + body: String?, + formattedBody: String?, + progressCallback: ProgressCallback?, + ) -> Result = { _, _, _, _, _, _ -> + Result.success(FakeMediaUploadHandler()) + } - override suspend fun sendImage(file: File, thumbnailFile: File?, imageInfo: ImageInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?): Result = sendImageLambda( + override suspend fun sendImage( + file: File, + thumbnailFile: File?, + imageInfo: ImageInfo, + body: String?, + formattedBody: String?, + progressCallback: ProgressCallback?, + ): Result = sendImageLambda( file, thumbnailFile, imageInfo, @@ -95,10 +146,25 @@ class FakeTimeline( progressCallback ) - var sendVideoLambda: (file: File, thumbnailFile: File?, videoInfo: VideoInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?) -> Result = - { _, _, _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } + var sendVideoLambda: ( + file: File, + thumbnailFile: File?, + videoInfo: VideoInfo, + body: String?, + formattedBody: String?, + progressCallback: ProgressCallback?, + ) -> Result = { _, _, _, _, _, _ -> + Result.success(FakeMediaUploadHandler()) + } - override suspend fun sendVideo(file: File, thumbnailFile: File?, videoInfo: VideoInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?): Result = sendVideoLambda( + override suspend fun sendVideo( + file: File, + thumbnailFile: File?, + videoInfo: VideoInfo, + body: String?, + formattedBody: String?, + progressCallback: ProgressCallback?, + ): Result = sendVideoLambda( file, thumbnailFile, videoInfo, @@ -107,19 +173,37 @@ class FakeTimeline( progressCallback ) - var sendAudioLambda: (file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?) -> Result = - { _, _, _ -> Result.success(FakeMediaUploadHandler()) } + var sendAudioLambda: ( + file: File, + audioInfo: AudioInfo, + progressCallback: ProgressCallback?, + ) -> Result = { _, _, _ -> + Result.success(FakeMediaUploadHandler()) + } - override suspend fun sendAudio(file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?): Result = sendAudioLambda( + override suspend fun sendAudio( + file: File, + audioInfo: AudioInfo, + progressCallback: ProgressCallback?, + ): Result = sendAudioLambda( file, audioInfo, progressCallback ) - var sendFileLambda: (file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?) -> Result = - { _, _, _ -> Result.success(FakeMediaUploadHandler()) } + var sendFileLambda: ( + file: File, + fileInfo: FileInfo, + progressCallback: ProgressCallback?, + ) -> Result = { _, _, _ -> + Result.success(FakeMediaUploadHandler()) + } - override suspend fun sendFile(file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?): Result = sendFileLambda( + override suspend fun sendFile( + file: File, + fileInfo: FileInfo, + progressCallback: ProgressCallback?, + ): Result = sendFileLambda( file, fileInfo, progressCallback @@ -137,10 +221,23 @@ class FakeTimeline( var cancelSendLambda: (transactionId: TransactionId) -> Result = { Result.success(Unit) } override suspend fun cancelSend(transactionId: TransactionId): Result = cancelSendLambda(transactionId) - var sendLocationLambda: (body: String, geoUri: String, description: String?, zoomLevel: Int?, assetType: AssetType?) -> Result = - { _, _, _, _, _ -> Result.success(Unit) } + var sendLocationLambda: ( + body: String, + geoUri: String, + description: String?, + zoomLevel: Int?, + assetType: AssetType?, + ) -> Result = { _, _, _, _, _ -> + Result.success(Unit) + } - override suspend fun sendLocation(body: String, geoUri: String, description: String?, zoomLevel: Int?, assetType: AssetType?): Result = sendLocationLambda( + override suspend fun sendLocation( + body: String, + geoUri: String, + description: String?, + zoomLevel: Int?, + assetType: AssetType?, + ): Result = sendLocationLambda( body, geoUri, description, @@ -148,20 +245,44 @@ class FakeTimeline( assetType ) - var createPollLambda: (question: String, answers: List, maxSelections: Int, pollKind: PollKind) -> Result = - { _, _, _, _ -> Result.success(Unit) } + var createPollLambda: ( + question: String, + answers: List, + maxSelections: Int, + pollKind: PollKind, + ) -> Result = { _, _, _, _ -> + Result.success(Unit) + } - override suspend fun createPoll(question: String, answers: List, maxSelections: Int, pollKind: PollKind): Result = createPollLambda( + override suspend fun createPoll( + question: String, + answers: List, + maxSelections: Int, + pollKind: PollKind, + ): Result = createPollLambda( question, answers, maxSelections, pollKind ) - var editPollLambda: (pollStartId: EventId, question: String, answers: List, maxSelections: Int, pollKind: PollKind) -> Result = - { _, _, _, _, _ -> Result.success(Unit) } + var editPollLambda: ( + pollStartId: EventId, + question: String, + answers: List, + maxSelections: Int, + pollKind: PollKind, + ) -> Result = { _, _, _, _, _ -> + Result.success(Unit) + } - override suspend fun editPoll(pollStartId: EventId, question: String, answers: List, maxSelections: Int, pollKind: PollKind): Result = editPollLambda( + override suspend fun editPoll( + pollStartId: EventId, + question: String, + answers: List, + maxSelections: Int, + pollKind: PollKind, + ): Result = editPollLambda( pollStartId, question, answers, @@ -169,29 +290,67 @@ class FakeTimeline( pollKind ) - var sendPollResponseLambda: (pollStartId: EventId, answers: List) -> Result = { _, _ -> Result.success(Unit) } - override suspend fun sendPollResponse(pollStartId: EventId, answers: List): Result = sendPollResponseLambda(pollStartId, answers) + var sendPollResponseLambda: ( + pollStartId: EventId, + answers: List, + ) -> Result = { _, _ -> + Result.success(Unit) + } - var endPollLambda: (pollStartId: EventId, text: String) -> Result = { _, _ -> Result.success(Unit) } - override suspend fun endPoll(pollStartId: EventId, text: String): Result = endPollLambda(pollStartId, text) + override suspend fun sendPollResponse( + pollStartId: EventId, + answers: List, + ): Result = sendPollResponseLambda(pollStartId, answers) - var sendVoiceMessageLambda: (file: File, audioInfo: AudioInfo, waveform: List, progressCallback: ProgressCallback?) -> Result = - { _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } + var endPollLambda: ( + pollStartId: EventId, + text: String, + ) -> Result = { _, _ -> + Result.success(Unit) + } - override suspend fun sendVoiceMessage(file: File, audioInfo: AudioInfo, waveform: List, progressCallback: ProgressCallback?): Result = sendVoiceMessageLambda( + override suspend fun endPoll( + pollStartId: EventId, + text: String, + ): Result = endPollLambda(pollStartId, text) + + var sendVoiceMessageLambda: ( + file: File, + audioInfo: AudioInfo, + waveform: List, + progressCallback: ProgressCallback?, + ) -> Result = { _, _, _, _ -> + Result.success(FakeMediaUploadHandler()) + } + + override suspend fun sendVoiceMessage( + file: File, + audioInfo: AudioInfo, + waveform: List, + progressCallback: ProgressCallback?, + ): Result = sendVoiceMessageLambda( file, audioInfo, waveform, progressCallback ) - var sendReadReceiptLambda: (eventId: EventId, receiptType: ReceiptType) -> Result = { _, _ -> Result.success(Unit) } + var sendReadReceiptLambda: ( + eventId: EventId, + receiptType: ReceiptType, + ) -> Result = { _, _ -> + Result.success(Unit) + } + override suspend fun sendReadReceipt( eventId: EventId, receiptType: ReceiptType, ): Result = sendReadReceiptLambda(eventId, receiptType) - var paginateLambda: (direction: Timeline.PaginationDirection) -> Result = { Result.success(false) } + var paginateLambda: (direction: Timeline.PaginationDirection) -> Result = { + Result.success(false) + } + override suspend fun paginate(direction: Timeline.PaginationDirection): Result = paginateLambda(direction) override fun paginationStatus(direction: Timeline.PaginationDirection): StateFlow { From 076d2243a3f48200c2ea9a48a84e69c3205b7950 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 14:12:17 +0200 Subject: [PATCH 181/289] Add preview for focusedEvent. --- .../features/messages/impl/MessagesStateProvider.kt | 2 ++ .../messages/impl/timeline/TimelineStateProvider.kt | 3 ++- .../features/messages/impl/timeline/TimelineView.kt | 13 ++++++++----- .../components/TimelineItemGroupedEventsRow.kt | 5 +++-- 4 files changed, 15 insertions(+), 8 deletions(-) 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 00f02aed5d..acd7e86d58 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 @@ -106,6 +106,8 @@ fun aMessagesState( voiceMessageComposerState: VoiceMessageComposerState = aVoiceMessageComposerState(), timelineState: TimelineState = aTimelineState( timelineItems = aTimelineItemList(aTimelineItemTextContent()), + // Render a focused event for an event with sender information displayed + focusedEventIndex = 2, ), retrySendMenuState: RetrySendMenuState = aRetrySendMenuState(), readReceiptBottomSheetState: ReadReceiptBottomSheetState = aReadReceiptBottomSheetState(), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index b5dff2b54e..12820660ab 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -49,6 +49,7 @@ fun aTimelineState( timelineItems: ImmutableList = persistentListOf(), renderReadReceipts: Boolean = false, timelineRoomInfo: TimelineRoomInfo = aTimelineRoomInfo(), + focusedEventIndex: Int = -1, eventSink: (TimelineEvents) -> Unit = {}, ) = TimelineState( timelineItems = timelineItems, @@ -56,7 +57,7 @@ fun aTimelineState( renderReadReceipts = renderReadReceipts, newEventState = NewEventState.None, isLive = true, - focusedEventId = null, + focusedEventId = timelineItems.filterIsInstance().getOrNull(focusedEventIndex)?.eventId, focusRequestState = FocusRequestState.None, eventSink = eventSink, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index de8d198fd3..119e358476 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -265,8 +265,8 @@ private fun BoxScope.TimelineScrollHelper( // Use inverse of canAutoScroll otherwise we might briefly see the before the scroll animation is triggered isVisible = !canAutoScroll || forceJumpToBottomVisibility || !isLive, modifier = Modifier - .align(Alignment.BottomEnd) - .padding(end = 24.dp, bottom = 12.dp), + .align(Alignment.BottomEnd) + .padding(end = 24.dp, bottom = 12.dp), onClick = { jumpToBottom() }, ) } @@ -293,8 +293,8 @@ private fun JumpToBottomButton( ) { Icon( modifier = Modifier - .size(24.dp) - .rotate(90f), + .size(24.dp) + .rotate(90f), imageVector = CompoundIcons.ArrowRight(), contentDescription = stringResource(id = CommonStrings.a11y_jump_to_bottom) ) @@ -312,7 +312,10 @@ internal fun TimelineViewPreview( LocalTimelineItemPresenterFactories provides aFakeTimelineItemPresenterFactories(), ) { TimelineView( - state = aTimelineState(timelineItems), + state = aTimelineState( + timelineItems = timelineItems, + focusedEventIndex = 0, + ), typingNotificationState = aTypingNotificationState(), onUserDataClicked = {}, onLinkClicked = {}, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt index 35571278bb..2dcc0c1b55 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt @@ -160,12 +160,13 @@ private fun TimelineItemGroupedEventsRowContent( @PreviewsDayNight @Composable internal fun TimelineItemGroupedEventsRowContentExpandedPreview() = ElementPreview { + val events = aGroupedEvents(withReadReceipts = true) TimelineItemGroupedEventsRowContent( isExpanded = true, onExpandGroupClick = {}, - timelineItem = aGroupedEvents(withReadReceipts = true), + timelineItem = events, timelineRoomInfo = aTimelineRoomInfo(), - focusedEventId = null, + focusedEventId = events.events.first().eventId, renderReadReceipts = true, isLastOutgoingMessage = false, onClick = {}, From 2dd122e9e9040801de4b4b1e60ebaccdeee37aa1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 14:28:09 +0200 Subject: [PATCH 182/289] Improve focusedEvent rendering when sender information are displayed. --- .../timeline/components/TimelineItemRow.kt | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index b54e0a51ac..dafb244f66 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.draw.drawWithCache import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.features.messages.impl.timeline.TimelineEvents @@ -58,7 +59,12 @@ internal fun TimelineItemRow( modifier: Modifier = Modifier ) { val backgroundModifier = if (timelineItem.isEvent(focusedEventId)) { - Modifier.focusedEvent() + val focusedEventOffset = if ((timelineItem as? TimelineItem.Event)?.showSenderInformation == true) { + 14.dp + } else { + 2.dp + } + Modifier.focusedEvent(focusedEventOffset) } else { Modifier } @@ -130,18 +136,28 @@ internal fun TimelineItemRow( } @Composable -private fun Modifier.focusedEvent(): Modifier { +private fun Modifier.focusedEvent( + focusedEventOffset: Dp +): Modifier { val highlightedLineColor = ElementTheme.colors.textActionAccent val gradientColors = listOf( ElementTheme.colors.highlightedMessageBackgroundColor, ElementTheme.materialColors.background ) - val verticalOffset = 2.dp.toPx() + val verticalOffset = focusedEventOffset.toPx() return drawWithCache { val brush = Brush.verticalGradient(gradientColors) onDrawBehind { - drawRect(brush, topLeft = Offset(0f, verticalOffset), size = Size(size.width, size.height * 0.7f)) - drawLine(highlightedLineColor, start = Offset(0f, verticalOffset), end = Offset(size.width, verticalOffset)) + drawRect( + brush, + topLeft = Offset(0f, verticalOffset), + size = Size(size.width, size.height * 0.7f) + ) + drawLine( + highlightedLineColor, + start = Offset(0f, verticalOffset), + end = Offset(size.width, verticalOffset) + ) } }.padding(top = 4.dp) } From b8cb2d92e927eda9984bb27274b81f158529f9ef Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 14:30:51 +0200 Subject: [PATCH 183/289] Add missing color preview. --- .../android/libraries/designsystem/theme/ColorAliases.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 1cd67e15f7..053e1c1d37 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -171,6 +171,8 @@ internal fun ColorAliasesPreview() = ElementPreview { "temporaryColorBgSpecial" to ElementTheme.colors.temporaryColorBgSpecial, "iconSuccessPrimaryBackground" to ElementTheme.colors.iconSuccessPrimaryBackground, "bigIconBackgroundColor" to ElementTheme.colors.bigIconDefaultBackgroundColor, + "bigCheckmarkBorderColor" to ElementTheme.colors.bigCheckmarkBorderColor, + "highlightedMessageBackgroundColor" to ElementTheme.colors.highlightedMessageBackgroundColor, ) ) } From 83d9e77c6a25a578e55e93db2f90f412e656ed1d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 14:40:54 +0200 Subject: [PATCH 184/289] Fix issue with Gradient rendering. --- .../messages/impl/timeline/components/TimelineItemRow.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index dafb244f66..11ea953b2f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -145,13 +145,17 @@ private fun Modifier.focusedEvent( ElementTheme.materialColors.background ) val verticalOffset = focusedEventOffset.toPx() + val verticalRatio = 0.7f return drawWithCache { - val brush = Brush.verticalGradient(gradientColors) + val brush = Brush.verticalGradient( + colors = gradientColors, + endY = size.height * verticalRatio, + ) onDrawBehind { drawRect( brush, topLeft = Offset(0f, verticalOffset), - size = Size(size.width, size.height * 0.7f) + size = Size(size.width, size.height * verticalRatio) ) drawLine( highlightedLineColor, From f4f5888d5b3a9196543ed8e9975b8ca1bdcdfd0e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 14:47:01 +0200 Subject: [PATCH 185/289] Move LiveTimelineProvider to the test module. --- .../impl/timeline/TimelineController.kt | 4 +-- .../forward/ForwardMessagesPresenterTests.kt | 2 +- .../impl/create/CreatePollPresenterTest.kt | 2 +- .../impl/history/PollHistoryPresenterTest.kt | 2 +- .../matrix/api/timeline/TimelineProvider.kt | 15 ---------- .../test/timeline/LiveTimelineProvider.kt | 29 +++++++++++++++++++ 6 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/LiveTimelineProvider.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index c7bd1b9b63..2d3a4fbf7c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -21,7 +21,6 @@ import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.TimelineProvider @@ -46,10 +45,9 @@ import kotlin.coroutines.cancellation.CancellationException /** * This controller is responsible of using the right timeline to display messages and make associated actions. * It can be focused on the live timeline or on a detached timeline (focusing an unknown event). - * This controller will replace the [LiveTimelineProvider] in the DI. */ @SingleIn(RoomScope::class) -@ContributesBinding(RoomScope::class, boundType = TimelineProvider::class, replaces = [LiveTimelineProvider::class]) +@ContributesBinding(RoomScope::class, boundType = TimelineProvider::class) class TimelineController @Inject constructor( private val room: MatrixRoom, ) : Closeable, TimelineProvider { diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt index f6c749ea32..7715230511 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTests.kt @@ -22,11 +22,11 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.aRoomSummaryDetails import io.element.android.libraries.matrix.test.timeline.FakeTimeline +import io.element.android.libraries.matrix.test.timeline.LiveTimelineProvider import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.lambdaRecorder diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt index 0b33b7762f..2dbc612a0b 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt @@ -31,12 +31,12 @@ import io.element.android.features.poll.impl.data.PollRepository import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.SavePollInvocation import io.element.android.libraries.matrix.test.timeline.FakeTimeline +import io.element.android.libraries.matrix.test.timeline.LiveTimelineProvider import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.lambda.assert diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt index f07a2ce16a..638f9e6ff0 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenterTest.kt @@ -32,13 +32,13 @@ import io.element.android.features.poll.test.actions.FakeEndPollAction import io.element.android.features.poll.test.actions.FakeSendPollResponseAction import io.element.android.libraries.dateformatter.test.FakeDaySeparatorFormatter import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.timeline.LiveTimelineProvider import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.AN_EVENT_ID_2 import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.timeline.FakeTimeline +import io.element.android.libraries.matrix.test.timeline.LiveTimelineProvider import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.lambdaRecorder diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt index f8e0965c7a..ebfaca48be 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/TimelineProvider.kt @@ -16,13 +16,8 @@ package io.element.android.libraries.matrix.api.timeline -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.matrix.api.room.MatrixRoom -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.first -import javax.inject.Inject /** * This interface defines a way to get the active timeline. @@ -33,13 +28,3 @@ interface TimelineProvider { } suspend fun TimelineProvider.getActiveTimeline(): Timeline = activeTimelineFlow().first() - -/** - * Default implementation of [TimelineProvider] that provides the live timeline of a room. - */ -@ContributesBinding(RoomScope::class) -class LiveTimelineProvider @Inject constructor( - private val room: MatrixRoom, -) : TimelineProvider { - override fun activeTimelineFlow(): StateFlow = MutableStateFlow(room.liveTimeline) -} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/LiveTimelineProvider.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/LiveTimelineProvider.kt new file mode 100644 index 0000000000..a62aeda6c6 --- /dev/null +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/LiveTimelineProvider.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.test.timeline + +import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.matrix.api.timeline.TimelineProvider +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow + +class LiveTimelineProvider( + private val room: MatrixRoom, +) : TimelineProvider { + override fun activeTimelineFlow(): StateFlow = MutableStateFlow(room.liveTimeline) +} From cf06acabe614038518ec161648077dfe7da63c09 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 14:51:33 +0200 Subject: [PATCH 186/289] Improve preview of TimelineLoadingMoreIndicator --- .../components/virtual/TimelineLoadingMoreIndicator.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt index 0af4f600ee..1719956cdb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineLoadingMoreIndicator.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline.components.virtual +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -62,8 +63,11 @@ internal fun TimelineLoadingMoreIndicator( @PreviewsDayNight @Composable internal fun TimelineLoadingMoreIndicatorPreview() = ElementPreview { - Column { - TimelineLoadingMoreIndicator(Timeline.PaginationDirection.FORWARDS) + Column( + modifier = Modifier.padding(vertical = 2.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { TimelineLoadingMoreIndicator(Timeline.PaginationDirection.BACKWARDS) + TimelineLoadingMoreIndicator(Timeline.PaginationDirection.FORWARDS) } } From 636c024d9a1d58e69d34b6a5c3d8adf3d7e2e909 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 15:23:24 +0200 Subject: [PATCH 187/289] Fix detekt issues --- .../android/features/messages/impl/timeline/TimelineView.kt | 3 ++- .../messages/impl/timeline/components/TimelineItemRow.kt | 1 + .../impl/timeline/components/TimelineItemVirtualRow.kt | 5 ++++- .../android/libraries/matrix/impl/timeline/RustTimeline.kt | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 119e358476..039062dc87 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -235,6 +235,7 @@ private fun BoxScope.TimelineScrollHelper( } } + val latestOnClearFocusRequestState by rememberUpdatedState(onClearFocusRequestState) LaunchedEffect(focusRequestState) { if (focusRequestState is FocusRequestState.Cached) { if (abs(lazyListState.firstVisibleItemIndex - focusRequestState.index) < 10) { @@ -242,7 +243,7 @@ private fun BoxScope.TimelineScrollHelper( } else { lazyListState.scrollToItem(focusRequestState.index) } - onClearFocusRequestState() + latestOnClearFocusRequestState() } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index 11ea953b2f..4193a9f131 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -135,6 +135,7 @@ internal fun TimelineItemRow( } } +@Suppress("ModifierComposable") @Composable private fun Modifier.focusedEvent( focusedEventOffset: Dp diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt index 635cda526e..d56fe00540 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt @@ -20,6 +20,8 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.TimelineRoomInfo @@ -51,8 +53,9 @@ fun TimelineItemVirtualRow( TimelineItemRoomBeginningModel -> TimelineItemRoomBeginningView(roomName = timelineRoomInfo.name) is TimelineItemLoadingIndicatorModel -> { TimelineLoadingMoreIndicator(virtual.model.direction) + val latestEventSink by rememberUpdatedState(eventSink) LaunchedEffect(virtual.model.timestamp) { - eventSink(TimelineEvents.LoadMore(virtual.model.direction)) + latestEventSink(TimelineEvents.LoadMore(virtual.model.direction)) } } is TimelineItemLastForwardIndicatorModel -> { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 4f67f00e57..39469b552c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -222,7 +222,8 @@ class RustTimeline( isDm = matrixRoom.isDm, hasMoreToLoadBackwards = hasMoreToLoadBackward ) - }.let { items -> loadingIndicatorsPostProcessor.process(items, hasMoreToLoadBackward, hasMoreToLoadForward) } + } + .let { items -> loadingIndicatorsPostProcessor.process(items, hasMoreToLoadBackward, hasMoreToLoadForward) } // Keep lastForwardIndicatorsPostProcessor last .let { items -> lastForwardIndicatorsPostProcessor.process(items) } } From 923811c73399023aace15f1872ba64b146d19adf Mon Sep 17 00:00:00 2001 From: ElementBot Date: Fri, 26 Apr 2024 13:37:58 +0000 Subject: [PATCH 188/289] Update screenshots --- ...ineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png | 4 ++-- ...eLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png | 4 ++-- ...ventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png | 4 ++-- ...ntsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png | 4 ++-- ...eView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png | 4 ++-- ...w_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png | 4 ++-- ...essagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...essagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...essagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...sagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...sagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...sagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en].png | 4 ++-- ...sView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en].png | 4 ++-- ...orAliases_null_ColorAliases-Day_0_null,NEXUS_5,1.0,en].png | 4 ++-- ...Aliases_null_ColorAliases-Night_1_null,NEXUS_5,1.0,en].png | 4 ++-- 70 files changed, 140 insertions(+), 140 deletions(-) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png index 9b3c889d05..7bc7202be5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c464ff6c892364dc096a8edba88074d891b9baa91f4ba50197c7a500d76c0fa7 -size 6247 +oid sha256:74cc9020e14baa41c05e07f2a804746df595d42c8343e139f05b57c508e1b59c +size 6298 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png index e443bf7f5d..ea1240cd75 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03e53795df5b0078a7883a4ed181e2a022aeec9f095eaddeed213e3de9b16069 -size 6200 +oid sha256:492c2a10c3d643d24a2d578baf385a7019a86b39bf14f3d077b3233a8d7524a5 +size 6217 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png index d6cfb16784..0e898bf24c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35bf09d08616a2b3867608ad948bbf3442b2c8a2560116ae36b01673cbbbf6f7 -size 14568 +oid sha256:031b16204426f762489bbf32d1667b9dc504fdc8c86535cad8ac8cca646c2564 +size 24135 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png index 94f097ddaf..4b10887481 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d662de6189258cb24f1c54fdb14ceb8e6a53620ce54643709999e5e7a9a184f -size 14603 +oid sha256:006894de328a6ec6a0d3ebac67145d695a4be790fbda9a39e932363a9f541d0e +size 23230 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png index d9a943df0c..7653bda8ff 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3346e3e5a48f51fa2dd92cfc41663ce8aab46ad2c7a6ddf03e716488c23a3eb7 -size 52900 +oid sha256:01f357adba4548473fe877a07b011ceaa5a178f99ac900dea43d01d60c1a0f94 +size 57952 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png index c993331871..3f7240f6e9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3adfe3cc79c1a55d6323644507a18fa893033adb2a243b444c7140188bd6e4cd -size 74734 +oid sha256:068c1af330928fd29430ff1ae19191c301bc47ca7287c44a313f591a0e939ce8 +size 77949 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png index a4fb23768a..02ab9c1c61 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:508dd6992bd02c65c18e636376303af3d88d3c98b2b4baf5c7ba45b0f4116594 -size 347900 +oid sha256:e8b50e3c122c296eb28dd4bb1a35efa1c41058dac73c2bb3ed335b399a2688ce +size 355047 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png index b057e2366d..c6115adb71 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19daf8b409eda4b1c70ec0822703fc75734dedaf15405632bd015bd8b9361cc7 -size 80256 +oid sha256:dd99189b5eae40c9c76c8f026d6594dd8b5014b4e19fd2114e282b01ddbd90bf +size 96283 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png index fb11a3aa0c..4bff5f0b50 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d566fde31c28cb1aea24ab9203969a1dffeeca82cb42dc43f09b85f838f0e27 -size 54399 +oid sha256:35b5000c83642d92d179acee804e15977d2f77680a312f8f76b84bf6f93a652d +size 59357 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png index b52818eb20..5246070904 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec4c766a59655ef307230b3da8c7000c115df97a5b0fe3eab8460f721215182f -size 66881 +oid sha256:63e8554b77aaba345cdf8d636b6983b010553e3734f3ce057e1f98682c371d46 +size 70692 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png index 47560bfed5..32a058575c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e4c783d17349b9a8280a739f16d1fe493794c85df7edcae64126e59130ce7de -size 50673 +oid sha256:a2f8fa9960347f2e728d9817c7622e21207dc5eb21ea167da17593833633a763 +size 56094 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png index 8f5d4499dd..e0dc47affa 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2384468708808ff65f38add76d0b0b30c3a737c069021989a904e859aa7ce762 -size 67772 +oid sha256:9aa8bf2c707800a5bef7f3487d359fec33ef3f51529072a00e79a2ab55595337 +size 71602 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png index 88013bff3e..35097d1d97 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00254155626cb17b13012f39e02bd91d844ee8f8e66f2eb46808e9d0559a2e58 -size 58094 +oid sha256:d4fe5c5d4c91369a2e668c4bcd0ce966ce03935d11dc282cefd27c0f35ce791c +size 62484 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png index e8cb515769..53ce3b677f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f12db44cac1283813617671f12d7841075267fdfdd637248d8ca3b873db0574 -size 198971 +oid sha256:47c0668cf7c6b04dd136723798344c7a391deb83063c39d9d7a267b264be757b +size 223068 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png index 19e44adc48..c979f1e764 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f59102f1b080437c58c9ea29a0c24710e1a77699cde64f025bdc984598728bf6 -size 199875 +oid sha256:e84eeec6485d20b7bcda16a9bc1a135feddac05cebc2b9b902eaccfd782ad12f +size 224298 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png index 17e245bd6c..43b1d7d3e8 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4051e35af17b29831c15a9ce2daab7873856d499352284cc266d9a16cf6ec570 -size 72657 +oid sha256:fd7c86942aad6beeee3c24e73247fd60479d7917bc04f4dff33da642f406afe3 +size 79505 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png index c906f23282..9efecb296b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7184a3edb75e7de06a9f1a8c77bc5ee857c8bc6c1332d0fd669976e33f4a7095 -size 88512 +oid sha256:53c8c167256bf3aed82d96ccd87ce322ee9e1aadd68c75a5023e422d84d97403 +size 92700 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png index 7146940ea8..36af7732d1 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d7779ff91f299f19b77a77c7c5037f6602300fd7d5013602f454231f235ff99 -size 74927 +oid sha256:bc85cc740fc1e15e2680d3bd34e8d16d60e94f8c21391db48cc37620cf2fbb71 +size 81861 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png index 92a76ff176..4844572917 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c87aa2140d49ff777e83e2c034eda87bf782dc2de2e3ad8dda30b683ea77491 -size 106818 +oid sha256:ef1aeb93f8b0ea48393af6c7b515ecf530c696dda3b05ad5b7b0f102a70ceb4a +size 110876 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png index f53af6bbcd..a2d00d0658 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e70fc1e04cfaa3854b1951435c1b1181660fbe47bd3cf67c4cf58b88d3ce5cdc -size 56601 +oid sha256:9feaa51ab3dd20a3a0f69b491118b0cb0e44389b7b72926173d690780e3158f3 +size 61015 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png index 59932af996..9f606059cb 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cdcdc475a586e43da2ae557399c4b01d412f0ce74ef93a27e15cdd7b0bb679d -size 393373 +oid sha256:e8ba1ded44b0093b82d63903b6ce13c43f9fb187eec328bccb25b1c2761bb004 +size 398839 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png index 313d5b49f7..9188618ad6 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:450763462987ae38f8d3531a110982284c5dc0e5ed1e5c0900d84ff88e2237dd -size 51022 +oid sha256:fff88277974635316e9c48876794a45fc22605553ae1027c02f097d68b5dc460 +size 55709 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png index 12f4ded419..1905ff6055 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:836eb753146dd70407a64b9c918c85245c753bebc448a275f9da9ff7d0a78d8e -size 71645 +oid sha256:02af125ead62964cd3d05c509d8b02a4ca1c2c3d9be449daaa3365bf0288bc88 +size 74665 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png index 765f26f6cc..e13dd59ad5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f300e31cc6ade1665b134604682a43f9023bf2018ad58dca6b875da83440b2bf -size 178263 +oid sha256:823d32bb40bb091f645a3d73db1480970a7c65120e009e2922d1d29564bf82b5 +size 186340 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png index a0764bcda6..d9daeec206 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:923a8664899986f9c9af1d533af9e1bf55d446a75b31694fc11aea1ff05b2bff -size 79334 +oid sha256:de43fb6408ac31359061bf6374d377798f481e6478862a307d73b42713ef70b6 +size 95613 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png index fa96586263..8003345444 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:725b8dfcc5e5ac4a849b5e8408bf0796c96566bdb7460b0908b6c8da8731850e -size 52680 +oid sha256:c3083c45f084526ba69a52b5710f9a224699c871f78cd7daa033152c05cb9774 +size 57171 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png index 02ce21f21c..ca4f60522b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:99541143d6e6337312800ce96d799dbe4a45b615a52b28685b0aef2e30a35502 -size 64205 +oid sha256:164313ceaebd85020ba7322e5d3fd6fd692975270cc3f375bc6594a9f38cb877 +size 67884 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png index d8c7c5d9ba..84f8e8f64f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d6579010f071d931ab155377ed8691af5cb964235f1d50703691d5014e22528 -size 48954 +oid sha256:ab1e4101e3dab6f2d26e6385ea2d044853edfcf7dd54f2e2bd6a41b686ec7962 +size 53751 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png index 155602b37c..00e0f2a236 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb2d30e7a698b38c7f80384e532e9903ebb1bd793d678a557deff4789cf36e9c -size 64956 +oid sha256:30fad008f20cad13d2a688c17d98f27e677c952d8227b7f8d69bf5f9034fba26 +size 68795 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png index 2c83ffe8ec..7a5868deac 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58ae49eed2bfe851a4c368973ae285f0d7d04665154f2ab131518948980ab0d2 -size 55891 +oid sha256:58cd9f6a2534f962d16c120045d243cfee36cfcb58362809a3ce97d01dc23568 +size 59811 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png index eb0205e5cd..182e39e88e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7261eb43b9d9847f405574b984d385365f5ba767c23837d7afc19077b4f6069c -size 198834 +oid sha256:48b4b6d0e78fca35b674c33440316ad7c440c4abb64ed861150295180bbc2a00 +size 222325 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png index 1ca34f82f6..0e49e57597 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d02b0fa3e17aa3388bf280135762e890bd210cf032baf3c96a93940c9dfbd23 -size 199794 +oid sha256:deae4682afadb57a1e2950cc4304005eabf380e08926f7914db0c27bbb82ef38 +size 223556 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png index 43ee0cf46e..8ad33da28f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fa23f91ee527428180bc08b66ab1e140255baf60cc541f87b378eaccae41eb0 -size 69721 +oid sha256:e2e7bc8a750fd6d4311ad5b9ce74eb20edebf90d44e0b4f7c830b098c55f1fa4 +size 76105 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png index 7e4d6daddb..c0d758ae8a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b6f55420804e82244e00ef14c178ebba1f353425a56428428f8cc028fb85370 -size 83978 +oid sha256:57ab836a605bcab4d4bdf7eac25692d7f876ecd4e8ff80c0f47105d6fc020879 +size 88013 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png index 97c5cc8bf2..4030bb2c56 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0b5f77065d71a319a3981a3ee245f91fd8926710051b146a97bab7ccef9aca1 -size 72201 +oid sha256:dbc583db87432412befcc64b4930faf30419c796b7aff62986cef5593bb1817a +size 78791 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png index 6fee67edad..ebb95c693d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b13774dfc0adcc300f1dbd71be3a26fae6b2a0b8bef1e83c114daa268f388079 -size 100885 +oid sha256:355a6baddbf772ad85a94a20ddd6e92e43526f8c166bb09a50ef43aab35d14ad +size 104693 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png index 6badd2e5e5..5af3ec352b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a004d83e36d52b2d113f9475e392cee55649589e6e67c8efc361cac88b130d50 -size 55201 +oid sha256:3053ab49659fb8bb5604772e32dca057a7d3c8ad967272bfd899c35207b73f0f +size 59756 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png index b9a4d15b9d..177c199abd 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:daa2eafe0a840ef99aff1020dbed2b0e31fedee604b05cc3e6642af7c3e968e5 -size 189474 +oid sha256:acdc972a8a61dacb2387f5131e044ab872038c246c45241c6b464c6ed2b3d244 +size 194776 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png index c2df9c0ca7..f0789db8fe 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa33a2dc4094680f3aa5b5e98efec6c02d585d98ff94ba6351ba7589fa156438 -size 55386 +oid sha256:34a3724a2c47e61e6c50848a40a8a03271f3c33cedbdf65bca39541084cf5d41 +size 64908 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png index a68d5922a0..c14bf5d943 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ba24739d9425c00794696d8a94b6261e605264da090a2c2702d5a81a67bfb46 -size 56180 +oid sha256:edbd8b2aedaf59a54dd6cbc4617a0cf962a5b215d8412d857f46167ab5584e7f +size 65737 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png index a0cc74f6c6..e61c636936 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7bd915ebfc3de3703fc039a02064c03dce3013580fd25f47582b0b7612785b9 -size 52110 +oid sha256:98b18653d6ec87c745e3341b6eb9d8403bf1e7488dcdaec1495df0c8ab1e2861 +size 61630 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png index dcf2410f8e..111a343f3f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22b316a3e0c0f9804578ac1d8e038c1087d2f2f3d71244a53f254a1d35d3512e -size 54131 +oid sha256:0351ee6b982b1894884dfd4e116b836a033d7496060f467ed678dc991a630686 +size 63946 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png index 3b9d2f642b..42d3042545 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6b4053d9e86e963919d6462849cf0bfbaf9df7f14330e64046d9d3cb1f5fbdd -size 55030 +oid sha256:d1fbe0db81c73883ffda9eac3964a768b3bcb7bdbf0a694a6a0f628a47c3abbc +size 64863 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png index a1eaf95736..5c71ee6478 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:daed63aa46f1d4e16de8b554616312b6a0d370768971894da346724ec9fdc145 -size 51012 +oid sha256:27167a8130d1ab01432d0f7a58d51328a1a0361943b5b0d7d258e42e09afafd9 +size 60802 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en].png index da5e3fcdf0..06062283f6 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59d50da7714bca7f9c1dc84216200e6063c02e1ea4337234fee49490730accb6 -size 57051 +oid sha256:eddc6d3e3df386d98db6604c863c7d16b29f55b6c66e5bcd108adca85d5ff3cc +size 66439 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_1,NEXUS_5,1.0,en].png index 89a6695ea1..2a8b2e16ed 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8e0026f5d91eecda82aba901adad7cbef701fc826de759ca9f46291418f75f9 -size 55935 +oid sha256:c8868918a3bf66bbef19d5c3db6fc3142749a6e0ceaea137af98b984b381c02c +size 65909 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en].png index b68eef26e9..299923153f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f88fbe042736ea55c2b70d980c9cf40edad6560d23220ab3317c4584f8825ef -size 58724 +oid sha256:09c436daccf75627f566973dc90cbfdfb1133e2d9dfe48b7ed2803aed8cd6113 +size 68078 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en].png index f4c2b33509..872c92764a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34ab1f97b8d2adc58f2d86c43557b2fcd726532cd051366c4bd79b4e775b37ae -size 52808 +oid sha256:eed1aa062d7bd5ab65d9526f82d5544e30415d2a628ef000a947a189e431e406 +size 55593 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en].png index 91a814763d..1a5b888264 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7aa093b0a7d678fb1324946fd5463fcd1206c602080b12bf614f2d48fcbf6742 -size 57069 +oid sha256:712bb9fef80d03d3fba835553707fc7a885a5bd175abfbac929da732e3aa914c +size 66453 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en].png index 5195c06123..89beb32409 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c92aeae7764707d6a39cf46f64304cb3a300eea5126779d8c4be604eb73c259c -size 58914 +oid sha256:8a15992f14ecd677239988c05e13c6a1d9e301fd0a9d9ee15ea4963c9cbfa3ba +size 68781 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en].png index 42945f4e1f..cf71e1aacc 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b15640f4d75e9fd03a951500bc5ac951074a50f1bd509b777b6248e7883901e7 -size 57599 +oid sha256:061c02fa1f32f25f37227446469e9460e0fe0593be54dee632b3e217bc783572 +size 60780 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en].png index 53e2d0267a..037379589c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06aa006c18c983bd9a8af378d72620ef545d7799bf9b945f53c68877fdeb41b7 -size 54847 +oid sha256:18623230b671c8cb4e9e1561b4a12ea607d8961525387d4120d0d695a0c9a057 +size 64198 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en].png index c51b9ba8c4..818021066a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01b31acd0f223cf78ee14cb0197204d49ee23a008ab428d974b8852f17c1847c -size 54696 +oid sha256:db37cab9354ee4c86039799665f71eb0ce35b69effc429dbc8af104a25e76d88 +size 64447 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en].png index 72738a1353..564731ce97 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20b2f2954e2200577d8f8b5be6125e3f75f271c0f61626ac90344a139488f9f6 -size 61845 +oid sha256:80ce7935681b2f82d45f98dcdc11dd171cb4a71db842a1f2a08ff1ddd64e45ea +size 64160 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en].png index 0bcfd1f274..51516ac05f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:50a033f6a3637e808a664cdee2cfa0bc9c2df8c91ec6d47b4eb30f87b5ca2e8c -size 42957 +oid sha256:aa1513a29201bff2f7c829ccafdc008818528a2a2c076b4d51405854e965b899 +size 45335 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en].png index 880cf820cf..db6219b31e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc634e8024c6a02c58f805c63ff7511f76ed1ab8291215801936b69d299ba71d -size 42117 +oid sha256:4359139aec1216d2fef31842037bea926743ef2df3f319828987fcfd4e3fee30 +size 44525 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en].png index f71061cfb9..fbf20a84e9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dba29739541d349cc688274f9a36add6d29541af88161b46a26fa94dc04a550f -size 55102 +oid sha256:b13ba3f24be0236a57cdf772beab06ca0b58f4549a4714ec4fb80667597cecbb +size 64293 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_1,NEXUS_5,1.0,en].png index 02a68cbe05..f2812a1fe5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3cc9539d303996fea60fe4fd955598ec614d0a10be0f14727590d68291c66aa -size 53971 +oid sha256:d28b7d12ad741c7eaf2a08baa4f0547ef5c2aefd40688c9bf3019c8e0cdc40b0 +size 63673 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en].png index cffabbd3b4..bfa7db723b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:baba3207129e98cc3d0c56575e6a02a213f9a980be9c7ede4f053ff3bd7d24c5 -size 56530 +oid sha256:2bb1a5b2889800c3accb6390a7a01c3f4d11cae75da88c012988f6415836d496 +size 65801 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en].png index d254cc77b8..4179df43c7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:961c098272b918099b85e4395ce8950bdbdce9eda9771741fe92d5c24433bc8c -size 47318 +oid sha256:f0cd86fce4381e8ed9d3095020aa0d175221d0ac864a5f339d363f9dd150b7e1 +size 48933 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en].png index 446b41706b..d4121e20ba 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9d6c000c1b200698152d0ade87efb8e9779ea6ec7524ec382a4e1760d9cbf7a -size 55118 +oid sha256:285c7b31233af00920a8627e3e6a0b30c3916380d2b017b7d2106975725e7122 +size 64318 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en].png index de7de02a49..d35d23f452 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84298b824ecab7cb113bde4981f47ede93739cb98152d6b97b2536e3b8881329 -size 57172 +oid sha256:f0b7f07e311cd791afa841e115f3a39966e3866b8808545b7e6b4cb78fa08513 +size 66410 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en].png index f8fb58ac73..ce6f3d82da 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b30d4d37535cfdc79dee0a4bcd2fd313b20a701b00dbab0ed008822b3b7c80ea -size 52440 +oid sha256:644385471358d217b7eee5043419e3885cec12b9ee3b7220a723ab718184af43 +size 54253 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en].png index dab4c6b633..11508836df 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b31f3772ccc37782d6a20e3b10a080fa7656fb8a24c9ddf46873e8c272b448b1 -size 52730 +oid sha256:1b6d26e85d7dc6e4383b63e008ac0c7010e277ae9d9701367ff67b48a0b8d32d +size 61874 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en].png index cc08f4ac26..687dae04d3 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96016c441fd3f8a3283d8c4eee088a40502df1e41f6181ea6d488f67dad6d5a1 -size 52726 +oid sha256:898cc4eacaf946b7fe3f80c1eef228c7efd878bf47bceb9dda36dcb132dcc556 +size 62371 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en].png index b250014c1e..58d1d2d20c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55e7c770dc276c81a98819648ba371ac5c17b681a1e0a82e2699d391429efefd -size 56462 +oid sha256:0902a2d1c4bcd56b54fdfba543ca2d4b5bc52ece9491f24edaf85b4f2845868e +size 57742 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en].png index d583fc2f29..f9eb25db65 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83587419132d5d59596f85b1b4f6213a1bba7576e35ff31933725b38abd3bcaf -size 39609 +oid sha256:eb95c69e054b36dac81293c9c67fe6a249ab5cd2a146f1ef7d316cba858e0a0a +size 40666 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en].png index 8016c26902..c64c93756a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef5c1a45982605a4f3c253dfbc280c24acdd84ea9446d3c9709823e10cdf6c05 -size 38817 +oid sha256:f513e9430fe5447ccfd162ff2693889e1d332434186da6d494c91a4b7f5d460b +size 39890 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme_ColorAliases_null_ColorAliases-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme_ColorAliases_null_ColorAliases-Day_0_null,NEXUS_5,1.0,en].png index b090053fa3..e966144767 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme_ColorAliases_null_ColorAliases-Day_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme_ColorAliases_null_ColorAliases-Day_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:096dd17663bcacc9349cd9f31fafff1b76f35bd8d9a7a08d080d8b858b7f3e1d -size 62792 +oid sha256:4f2148c471455c65f6745b3972c2b7241d1286188c91842bf253d915c7aea6b3 +size 74511 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme_ColorAliases_null_ColorAliases-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme_ColorAliases_null_ColorAliases-Night_1_null,NEXUS_5,1.0,en].png index 01d2e8ac5a..943e60e8e6 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme_ColorAliases_null_ColorAliases-Night_1_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.theme_ColorAliases_null_ColorAliases-Night_1_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc08b47e2f2627a751931958e4fd017a24793df71211bbcb7f2ee6d7a9ae1a83 -size 62530 +oid sha256:35c2946241c996d03d42585c95d3a9a0d8cd4ba17fad0d79102ab407618c3951 +size 73952 From d3d508108439f909e114b119421b12ac22c542ae Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 15:30:02 +0200 Subject: [PATCH 189/289] Do not ignore those tests. (was committed by mistake) --- .../location/impl/common/actions/AndroidLocationActionsTest.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActionsTest.kt b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActionsTest.kt index 9665c886d7..6cd7cf82ce 100644 --- a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActionsTest.kt +++ b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActionsTest.kt @@ -18,11 +18,9 @@ package io.element.android.features.location.impl.common.actions import com.google.common.truth.Truth.assertThat import io.element.android.features.location.api.Location -import org.junit.Ignore import org.junit.Test import java.net.URLEncoder -@Ignore internal class AndroidLocationActionsTest { // We use an Android-native encoder in the actual app, switch to an equivalent JVM one for the tests private fun urlEncoder(input: String) = URLEncoder.encode(input, "US-ASCII") From a4c6e6c281eb3a75d621d289b4d83fa45035a01a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 16:08:08 +0200 Subject: [PATCH 190/289] Add mapping on FocusEventException. Extract FocusRequestState to its own file and add preview. --- .../impl/timeline/TimelineController.kt | 26 +++---- .../messages/impl/timeline/TimelineView.kt | 24 +------ .../focus/FocusRequestStateProvider.kt | 45 +++++++++++++ .../timeline/focus/FocusRequestStateView.kt | 67 +++++++++++++++++++ .../libraries/matrix/api/room/MatrixRoom.kt | 2 +- .../api/room/errors/FocusEventException.kt | 34 ++++++++++ .../matrix/impl/room/FocusEventException.kt | 42 ++++++++++++ .../matrix/impl/room/RustMatrixRoom.kt | 21 +++--- .../matrix/test/room/FakeMatrixRoom.kt | 4 +- .../src/main/res/values/localazy.xml | 1 + 10 files changed, 219 insertions(+), 47 deletions(-) create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/focus/FocusRequestStateProvider.kt create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/focus/FocusRequestStateView.kt create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/errors/FocusEventException.kt create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/FocusEventException.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index 2d3a4fbf7c..bc12524045 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -24,6 +24,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.TimelineProvider +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.SupervisorJob @@ -40,7 +41,6 @@ import kotlinx.coroutines.flow.stateIn import java.io.Closeable import java.util.Optional import javax.inject.Inject -import kotlin.coroutines.cancellation.CancellationException /** * This controller is responsible of using the right timeline to display messages and make associated actions. @@ -72,20 +72,20 @@ class TimelineController @Inject constructor( } suspend fun focusOnEvent(eventId: EventId): Result { - return try { - val newDetachedTimeline = room.timelineFocusedOnEvent(eventId) - detachedTimeline.getAndUpdate { current -> - if (current.isPresent) { - current.get().close() + return room.timelineFocusedOnEvent(eventId) + .onFailure { + if (it is CancellationException) { + throw it + } + } + .map { newDetachedTimeline -> + detachedTimeline.getAndUpdate { current -> + if (current.isPresent) { + current.get().close() + } + Optional.of(newDetachedTimeline) } - Optional.of(newDetachedTimeline) } - Result.success(Unit) - } catch (cancellation: CancellationException) { - throw cancellation - } catch (exception: Exception) { - Result.failure(exception) - } } /** diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 039062dc87..7f76dfe730 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -57,6 +57,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.messages.impl.timeline.components.TimelineItemRow import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPresenterFactories import io.element.android.features.messages.impl.timeline.di.aFakeTimelineItemPresenterFactories +import io.element.android.features.messages.impl.timeline.focus.FocusRequestStateView import io.element.android.features.messages.impl.timeline.model.NewEventState import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent @@ -64,8 +65,6 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.typing.TypingNotificationState import io.element.android.features.messages.impl.typing.TypingNotificationView import io.element.android.features.messages.impl.typing.aTypingNotificationState -import io.element.android.libraries.designsystem.components.ProgressDialog -import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.FloatingActionButton @@ -176,27 +175,6 @@ fun TimelineView( } } -@Composable -private fun FocusRequestStateView( - focusRequestState: FocusRequestState, - onClearFocusRequestState: () -> Unit, - modifier: Modifier = Modifier, -) { - when (focusRequestState) { - is FocusRequestState.Failure -> { - ErrorDialog( - content = stringResource(id = CommonStrings.common_failed), - onDismiss = onClearFocusRequestState, - modifier = modifier, - ) - } - FocusRequestState.Fetching -> { - ProgressDialog(modifier = modifier, onDismissRequest = onClearFocusRequestState) - } - else -> Unit - } -} - @Composable private fun BoxScope.TimelineScrollHelper( hasAnyEvent: Boolean, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/focus/FocusRequestStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/focus/FocusRequestStateProvider.kt new file mode 100644 index 0000000000..cb5b4a10f2 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/focus/FocusRequestStateProvider.kt @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline.focus + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.messages.impl.timeline.FocusRequestState +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.room.errors.FocusEventException + +open class FocusRequestStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + FocusRequestState.Fetching, + FocusRequestState.Failure( + FocusEventException.EventNotFound( + eventId = EventId("\$anEventId"), + ) + ), + FocusRequestState.Failure( + FocusEventException.InvalidEventId( + eventId = "invalid", + err = "An error" + ) + ), + FocusRequestState.Failure( + FocusEventException.Other( + msg = "An error" + ) + ), + ) +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/focus/FocusRequestStateView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/focus/FocusRequestStateView.kt new file mode 100644 index 0000000000..4a4381d269 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/focus/FocusRequestStateView.kt @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline.focus + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.PreviewParameter +import io.element.android.features.messages.impl.timeline.FocusRequestState +import io.element.android.libraries.designsystem.components.ProgressDialog +import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.matrix.api.room.errors.FocusEventException +import io.element.android.libraries.ui.strings.CommonStrings + +@Composable +fun FocusRequestStateView( + focusRequestState: FocusRequestState, + onClearFocusRequestState: () -> Unit, + modifier: Modifier = Modifier, +) { + when (focusRequestState) { + is FocusRequestState.Failure -> { + val errorMessage = when (focusRequestState.throwable) { + is FocusEventException.EventNotFound, + is FocusEventException.InvalidEventId -> stringResource(id = CommonStrings.error_message_not_found) + is FocusEventException.Other -> stringResource(id = CommonStrings.error_unknown) + else -> stringResource(id = CommonStrings.error_unknown) + } + ErrorDialog( + content = errorMessage, + onDismiss = onClearFocusRequestState, + modifier = modifier, + ) + } + FocusRequestState.Fetching -> { + ProgressDialog(modifier = modifier, onDismissRequest = onClearFocusRequestState) + } + else -> Unit + } +} + +@PreviewsDayNight +@Composable +internal fun FocusRequestStateViewPreview( + @PreviewParameter(FocusRequestStateProvider::class) state: FocusRequestState, +) = ElementPreview { + FocusRequestStateView( + focusRequestState = state, + onClearFocusRequestState = {}, + ) +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index ad27a0eb36..86e943fea9 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -100,7 +100,7 @@ interface MatrixRoom : Closeable { val liveTimeline: Timeline - suspend fun timelineFocusedOnEvent(eventId: EventId): Timeline + suspend fun timelineFocusedOnEvent(eventId: EventId): Result fun destroy() diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/errors/FocusEventException.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/errors/FocusEventException.kt new file mode 100644 index 0000000000..51859db1fb --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/errors/FocusEventException.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.room.errors + +import io.element.android.libraries.matrix.api.core.EventId + +sealed class FocusEventException : Exception() { + data class InvalidEventId( + val eventId: String, + val err: String + ) : FocusEventException() + + data class EventNotFound( + val eventId: EventId + ) : FocusEventException() + + data class Other( + val msg: String + ) : FocusEventException() +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/FocusEventException.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/FocusEventException.kt new file mode 100644 index 0000000000..c2a4456f55 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/FocusEventException.kt @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.room + +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.room.errors.FocusEventException +import org.matrix.rustcomponents.sdk.FocusEventException as RustFocusEventException + +fun Throwable.toFocusEventException(): Throwable { + return when (this) { + is RustFocusEventException -> { + when (this) { + is RustFocusEventException.InvalidEventId -> { + FocusEventException.InvalidEventId(eventId, err) + } + is RustFocusEventException.EventNotFound -> { + FocusEventException.EventNotFound(EventId(eventId)) + } + is RustFocusEventException.Other -> { + FocusEventException.Other(msg) + } + } + } + else -> { + this + } + } +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 0043d52545..e0f992a367 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.impl.room import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.childScope +import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.core.RoomAlias @@ -169,13 +170,17 @@ class RustMatrixRoom( override suspend fun unsubscribeFromSync() = roomSyncSubscriber.unsubscribe(roomId) - override suspend fun timelineFocusedOnEvent(eventId: EventId): Timeline { - return innerRoom.timelineFocusedOnEvent( - eventId = eventId.value, - numContextEvents = 50u, - internalIdPrefix = "focus_$eventId", - ).let { inner -> - createTimeline(inner, isLive = false) + override suspend fun timelineFocusedOnEvent(eventId: EventId): Result { + return runCatching { + innerRoom.timelineFocusedOnEvent( + eventId = eventId.value, + numContextEvents = 50u, + internalIdPrefix = "focus_$eventId", + ).let { inner -> + createTimeline(inner, isLive = false) + } + }.mapFailure { + it.toFocusEventException() } } @@ -442,7 +447,7 @@ class RustMatrixRoom( } override suspend fun toggleReaction(emoji: String, eventId: EventId): Result { - return liveTimeline.toggleReaction(emoji, eventId) + return liveTimeline.toggleReaction(emoji, eventId) } override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result { diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index 17f9358df7..d3d89a0788 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -215,8 +215,8 @@ class FakeMatrixRoom( override val syncUpdateFlow: StateFlow = MutableStateFlow(0L) - override suspend fun timelineFocusedOnEvent(eventId: EventId): Timeline { - return FakeTimeline() + override suspend fun timelineFocusedOnEvent(eventId: EventId): Result { + return Result.success(FakeTimeline()) } override suspend fun subscribeToSync() = Unit diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 832a3df104..f25969332e 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -240,6 +240,7 @@ "Failed loading messages" "%1$s could not access your location. Please try again later." "Failed to upload your voice message." + "Message not found" "%1$s does not have permission to access your location. You can enable access in Settings." "%1$s does not have permission to access your location. Enable access below." "%1$s does not have permission to access your microphone. Enable access to record a voice message." From 971f44c0d31b5df7a333cf8939e24a109d7c838d Mon Sep 17 00:00:00 2001 From: Valere Date: Thu, 25 Apr 2024 10:10:08 +0200 Subject: [PATCH 191/289] Expected UTDs due to membership support --- .../event/TimelineItemEncryptedView.kt | 37 +++++++++++++++---- gradle/libs.versions.toml | 2 +- .../api/timeline/item/event/EventContent.kt | 3 +- .../api/timeline/item/event/UtdCause.kt | 22 +++++++++++ .../matrix/impl/analytics/UtdTracker.kt | 8 +++- .../item/event/TimelineEventContentMapper.kt | 11 +++++- 6 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/UtdCause.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt index 1b67fce85d..039188b3aa 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline.components.event +import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -25,6 +26,7 @@ import io.element.android.libraries.designsystem.icons.CompoundDrawables import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent +import io.element.android.libraries.matrix.api.timeline.item.event.UtdCause import io.element.android.libraries.ui.strings.CommonStrings @Composable @@ -33,10 +35,17 @@ fun TimelineItemEncryptedView( onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit, modifier: Modifier = Modifier ) { + var text = stringResource(id = CommonStrings.common_waiting_for_decryption_key) + var iconId = CompoundDrawables.ic_compound_time + if (content.data is UnableToDecryptContent.Data.MegolmV1AesSha2 && + content.data.utdCause == UtdCause.Membership) { + text = stringResource(id = CommonStrings.common_unable_to_decrypt_no_access) + iconId = CompoundDrawables.ic_compound_block + } TimelineItemInformativeView( - text = stringResource(id = CommonStrings.common_waiting_for_decryption_key), + text = text, iconDescription = stringResource(id = CommonStrings.dialog_title_warning), - iconResourceId = CompoundDrawables.ic_compound_time, + iconResourceId = iconId, onContentLayoutChanged = onContentLayoutChanged, modifier = modifier ) @@ -45,10 +54,22 @@ fun TimelineItemEncryptedView( @PreviewsDayNight @Composable internal fun TimelineItemEncryptedViewPreview() = ElementPreview { - TimelineItemEncryptedView( - content = TimelineItemEncryptedContent( - data = UnableToDecryptContent.Data.Unknown - ), - onContentLayoutChanged = {}, - ) + Column { + TimelineItemEncryptedView( + content = TimelineItemEncryptedContent( + data = UnableToDecryptContent.Data.Unknown + ), + onContentLayoutChanged = {}, + ) + + TimelineItemEncryptedView( + content = TimelineItemEncryptedContent( + data = UnableToDecryptContent.Data.MegolmV1AesSha2( + sessionId = "sessionId", + utdCause = UtdCause.Membership + ) + ), + onContentLayoutChanged = {}, + ) + } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3f877b3e05..090a65d9f4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -179,7 +179,7 @@ posthog = "com.posthog:posthog-android:3.1.18" sentry = "io.sentry:sentry-android:7.8.0" # Note: only 0.19.0 will compile properly # main branch can be tested replacing the version with main-SNAPSHOT -matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.15.0" +matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.20.0" # Emojibase matrix_emojibase_bindings = "io.element.android:emojibase-bindings:1.1.3" diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt index 9020a4c853..c0aac298a8 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt @@ -63,7 +63,8 @@ data class UnableToDecryptContent( ) : Data data class MegolmV1AesSha2( - val sessionId: String + val sessionId: String, + val utdCause: UtdCause ) : Data data object Unknown : Data diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/UtdCause.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/UtdCause.kt new file mode 100644 index 0000000000..46e4d62249 --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/UtdCause.kt @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.api.timeline.item.event + +enum class UtdCause { + Unknown, + Membership, +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTracker.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTracker.kt index 578782d6c2..e8f09d1686 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTracker.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTracker.kt @@ -21,6 +21,7 @@ import io.element.android.services.analytics.api.AnalyticsService import org.matrix.rustcomponents.sdk.UnableToDecryptDelegate import org.matrix.rustcomponents.sdk.UnableToDecryptInfo import timber.log.Timber +import uniffi.matrix_sdk_crypto.UtdCause import javax.inject.Inject class UtdTracker @Inject constructor( @@ -28,6 +29,10 @@ class UtdTracker @Inject constructor( ) : UnableToDecryptDelegate { override fun onUtd(info: UnableToDecryptInfo) { Timber.d("onUtd for event ${info.eventId}, timeToDecryptMs: ${info.timeToDecryptMs}") + val name = when (info.cause) { + UtdCause.UNKNOWN -> Error.Name.OlmKeysNotSentError + UtdCause.MEMBERSHIP -> Error.Name.ExpectedDueToMembership + } val event = Error( context = null, // Keep cryptoModule for compatibility. @@ -35,8 +40,7 @@ class UtdTracker @Inject constructor( cryptoSDK = Error.CryptoSDK.Rust, timeToDecryptMillis = info.timeToDecryptMs?.toInt() ?: -1, domain = Error.Domain.E2EE, - // TODO get a more specific error name from `info` - name = Error.Name.OlmKeysNotSentError, + name = name, ) analyticsService.capture(event) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt index 4e9ff6b98b..14ea994d38 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt @@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StateContent import io.element.android.libraries.matrix.api.timeline.item.event.StickerContent import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent +import io.element.android.libraries.matrix.api.timeline.item.event.UtdCause import io.element.android.libraries.matrix.impl.media.map import io.element.android.libraries.matrix.impl.poll.map import kotlinx.collections.immutable.toImmutableList @@ -41,6 +42,7 @@ import org.matrix.rustcomponents.sdk.use import org.matrix.rustcomponents.sdk.EncryptedMessage as RustEncryptedMessage import org.matrix.rustcomponents.sdk.MembershipChange as RustMembershipChange import org.matrix.rustcomponents.sdk.OtherState as RustOtherState +import uniffi.matrix_sdk_crypto.UtdCause as RustUtdCause class TimelineEventContentMapper(private val eventMessageMapper: EventMessageMapper = EventMessageMapper()) { fun map(content: TimelineItemContent): EventContent { @@ -148,6 +150,13 @@ private fun RustMembershipChange.map(): MembershipChange { } } +private fun RustUtdCause.map(): UtdCause { + return when (this) { + RustUtdCause.MEMBERSHIP -> UtdCause.Membership + RustUtdCause.UNKNOWN -> UtdCause.Unknown + } +} + // TODO extract state events? private fun RustOtherState.map(): OtherState { return when (this) { @@ -177,7 +186,7 @@ private fun RustOtherState.map(): OtherState { private fun RustEncryptedMessage.map(): UnableToDecryptContent.Data { return when (this) { - is RustEncryptedMessage.MegolmV1AesSha2 -> UnableToDecryptContent.Data.MegolmV1AesSha2(sessionId) + is RustEncryptedMessage.MegolmV1AesSha2 -> UnableToDecryptContent.Data.MegolmV1AesSha2(sessionId, cause.map()) is RustEncryptedMessage.OlmV1Curve25519AesSha2 -> UnableToDecryptContent.Data.OlmV1Curve25519AesSha2(senderKey) RustEncryptedMessage.Unknown -> UnableToDecryptContent.Data.Unknown } From 7e5f270e2bc662697d33a762be88b2159565de80 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 17:29:40 +0200 Subject: [PATCH 192/289] Create proper PreviewParameterProvider for TimelineItemEncryptedContent And remove `@Suppress("UNUSED_PARAMETER")` --- .../event/TimelineItemEncryptedView.kt | 31 +++++--------- .../TimelineItemEncryptedContentProvider.kt | 40 +++++++++++++++++++ 2 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEncryptedContentProvider.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt index 039188b3aa..cb314c23a6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt @@ -16,12 +16,13 @@ package io.element.android.features.messages.impl.timeline.components.event -import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.PreviewParameter import io.element.android.features.messages.impl.timeline.components.layout.ContentAvoidingLayoutData import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContentProvider import io.element.android.libraries.designsystem.icons.CompoundDrawables import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight @@ -31,7 +32,7 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun TimelineItemEncryptedView( - @Suppress("UNUSED_PARAMETER") content: TimelineItemEncryptedContent, + content: TimelineItemEncryptedContent, onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit, modifier: Modifier = Modifier ) { @@ -53,23 +54,11 @@ fun TimelineItemEncryptedView( @PreviewsDayNight @Composable -internal fun TimelineItemEncryptedViewPreview() = ElementPreview { - Column { - TimelineItemEncryptedView( - content = TimelineItemEncryptedContent( - data = UnableToDecryptContent.Data.Unknown - ), - onContentLayoutChanged = {}, - ) - - TimelineItemEncryptedView( - content = TimelineItemEncryptedContent( - data = UnableToDecryptContent.Data.MegolmV1AesSha2( - sessionId = "sessionId", - utdCause = UtdCause.Membership - ) - ), - onContentLayoutChanged = {}, - ) - } +internal fun TimelineItemEncryptedViewPreview( + @PreviewParameter(TimelineItemEncryptedContentProvider::class) content: TimelineItemEncryptedContent +) = ElementPreview { + TimelineItemEncryptedView( + content = content, + onContentLayoutChanged = {}, + ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEncryptedContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEncryptedContentProvider.kt new file mode 100644 index 0000000000..fafc65ac1b --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEncryptedContentProvider.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline.model.event + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent +import io.element.android.libraries.matrix.api.timeline.item.event.UtdCause + +open class TimelineItemEncryptedContentProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aTimelineItemEncryptedContent(), + aTimelineItemEncryptedContent( + data = UnableToDecryptContent.Data.MegolmV1AesSha2( + sessionId = "sessionId", + utdCause = UtdCause.Membership + ) + ), + ) +} + +private fun aTimelineItemEncryptedContent( + data: UnableToDecryptContent.Data = UnableToDecryptContent.Data.Unknown +) = TimelineItemEncryptedContent( + data = data +) From 8a532769e3dee06acd0fc2751c5e9016af4fa181 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 17:33:01 +0200 Subject: [PATCH 193/289] Compact code. --- .../components/event/TimelineItemEncryptedView.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt index cb314c23a6..e6ea67359e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt @@ -36,15 +36,14 @@ fun TimelineItemEncryptedView( onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit, modifier: Modifier = Modifier ) { - var text = stringResource(id = CommonStrings.common_waiting_for_decryption_key) - var iconId = CompoundDrawables.ic_compound_time - if (content.data is UnableToDecryptContent.Data.MegolmV1AesSha2 && + val (textId, iconId) = if (content.data is UnableToDecryptContent.Data.MegolmV1AesSha2 && content.data.utdCause == UtdCause.Membership) { - text = stringResource(id = CommonStrings.common_unable_to_decrypt_no_access) - iconId = CompoundDrawables.ic_compound_block + (CommonStrings.common_unable_to_decrypt_no_access to CompoundDrawables.ic_compound_block) + } else { + (CommonStrings.common_waiting_for_decryption_key to CompoundDrawables.ic_compound_time) } TimelineItemInformativeView( - text = text, + text = stringResource(id = textId), iconDescription = stringResource(id = CommonStrings.dialog_title_warning), iconResourceId = iconId, onContentLayoutChanged = onContentLayoutChanged, From f65025f841251d0a9e7eade37783a97a39131dd7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 25 Apr 2024 17:40:18 +0200 Subject: [PATCH 194/289] Clearer code. --- .../timeline/components/event/TimelineItemEncryptedView.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt index e6ea67359e..57cf3e0ecc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt @@ -36,8 +36,8 @@ fun TimelineItemEncryptedView( onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit, modifier: Modifier = Modifier ) { - val (textId, iconId) = if (content.data is UnableToDecryptContent.Data.MegolmV1AesSha2 && - content.data.utdCause == UtdCause.Membership) { + val isMembershipUtd = (content.data as? UnableToDecryptContent.Data.MegolmV1AesSha2)?.utdCause == UtdCause.Membership + val (textId, iconId) = if (isMembershipUtd) { (CommonStrings.common_unable_to_decrypt_no_access to CompoundDrawables.ic_compound_block) } else { (CommonStrings.common_waiting_for_decryption_key to CompoundDrawables.ic_compound_time) From bd2a11a51c03d3ffe0b520377705fde2a2acded1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 17:28:54 +0200 Subject: [PATCH 195/289] No need to have a MutableStateFlow for the live timeline. --- .../features/messages/impl/timeline/TimelineController.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index bc12524045..1352124454 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -35,6 +35,7 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn @@ -53,7 +54,7 @@ class TimelineController @Inject constructor( ) : Closeable, TimelineProvider { private val coroutineScope = CoroutineScope(SupervisorJob()) - private val liveTimeline = MutableStateFlow(room.liveTimeline) + private val liveTimeline = flowOf(room.liveTimeline) private val detachedTimeline = MutableStateFlow>(Optional.empty()) @OptIn(ExperimentalCoroutinesApi::class) From d6e02ea5030826f7200029f990b966505ab8e7a1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 17:29:28 +0200 Subject: [PATCH 196/289] Test TimelineController --- .../impl/timeline/TimelineControllerTest.kt | 217 ++++++++++++++++++ .../matrix/test/room/FakeMatrixRoom.kt | 10 +- .../matrix/test/timeline/FakeTimeline.kt | 10 +- 3 files changed, 234 insertions(+), 3 deletions(-) create mode 100644 features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineControllerTest.kt diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineControllerTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineControllerTest.kt new file mode 100644 index 0000000000..5bd1145aa3 --- /dev/null +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineControllerTest.kt @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline + +import app.cash.turbine.test +import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.api.room.Mention +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.matrix.test.AN_EVENT_ID +import io.element.android.libraries.matrix.test.A_UNIQUE_ID +import io.element.android.libraries.matrix.test.room.FakeMatrixRoom +import io.element.android.libraries.matrix.test.timeline.FakeTimeline +import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem +import io.element.android.tests.testutils.lambda.lambdaRecorder +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class TimelineControllerTest { + @Test + fun `test switching between live and detached timeline`() = runTest { + val liveTimeline = FakeTimeline(name = "live") + val detachedTimeline = FakeTimeline(name = "detached") + val matrixRoom = FakeMatrixRoom( + liveTimeline = liveTimeline + ) + matrixRoom.givenTimelineFocusedOnEventResult(Result.success(detachedTimeline)) + val sut = TimelineController(matrixRoom) + + sut.activeTimelineFlow().test { + awaitItem().also { state -> + assertThat(state).isEqualTo(liveTimeline) + } + assertThat(sut.isLive().first()).isTrue() + sut.focusOnEvent(AN_EVENT_ID) + awaitItem().also { state -> + assertThat(state).isEqualTo(detachedTimeline) + } + assertThat(sut.isLive().first()).isFalse() + assertThat(detachedTimeline.closeCounter).isEqualTo(0) + sut.focusOnLive() + assertThat(sut.isLive().first()).isTrue() + awaitItem().also { state -> + assertThat(state).isEqualTo(liveTimeline) + } + assertThat(detachedTimeline.closeCounter).isEqualTo(1) + } + } + + @Test + fun `test switching between detached 1 and detached 2 should close detached 1`() = runTest { + val liveTimeline = FakeTimeline(name = "live") + val detachedTimeline1 = FakeTimeline(name = "detached 1") + val detachedTimeline2 = FakeTimeline(name = "detached 2") + val matrixRoom = FakeMatrixRoom( + liveTimeline = liveTimeline + ) + val sut = TimelineController(matrixRoom) + + sut.activeTimelineFlow().test { + awaitItem().also { state -> + assertThat(state).isEqualTo(liveTimeline) + } + matrixRoom.givenTimelineFocusedOnEventResult(Result.success(detachedTimeline1)) + sut.focusOnEvent(AN_EVENT_ID) + awaitItem().also { state -> + assertThat(state).isEqualTo(detachedTimeline1) + } + assertThat(detachedTimeline1.closeCounter).isEqualTo(0) + assertThat(detachedTimeline2.closeCounter).isEqualTo(0) + // Focus on another event should close the previous detached timeline + matrixRoom.givenTimelineFocusedOnEventResult(Result.success(detachedTimeline2)) + sut.focusOnEvent(AN_EVENT_ID) + awaitItem().also { state -> + assertThat(state).isEqualTo(detachedTimeline2) + } + assertThat(detachedTimeline1.closeCounter).isEqualTo(1) + assertThat(detachedTimeline2.closeCounter).isEqualTo(0) + } + } + + @Test + fun `test switching to live when already in live should have no effect`() = runTest { + val liveTimeline = FakeTimeline(name = "live") + val matrixRoom = FakeMatrixRoom( + liveTimeline = liveTimeline + ) + val sut = TimelineController(matrixRoom) + sut.activeTimelineFlow().test { + awaitItem().also { state -> + assertThat(state).isEqualTo(liveTimeline) + } + assertThat(sut.isLive().first()).isTrue() + sut.focusOnLive() + assertThat(sut.isLive().first()).isTrue() + } + } + + @Test + fun `test closing the TimelineController should close the detached timeline`() = runTest { + val liveTimeline = FakeTimeline(name = "live") + val detachedTimeline = FakeTimeline(name = "detached") + val matrixRoom = FakeMatrixRoom( + liveTimeline = liveTimeline + ) + matrixRoom.givenTimelineFocusedOnEventResult(Result.success(detachedTimeline)) + val sut = TimelineController(matrixRoom) + + sut.activeTimelineFlow().test { + awaitItem().also { state -> + assertThat(state).isEqualTo(liveTimeline) + } + sut.focusOnEvent(AN_EVENT_ID) + awaitItem().also { state -> + assertThat(state).isEqualTo(detachedTimeline) + } + assertThat(detachedTimeline.closeCounter).isEqualTo(0) + sut.close() + assertThat(detachedTimeline.closeCounter).isEqualTo(1) + } + } + + @Test + fun `test getting timeline item`() = runTest { + val liveTimeline = FakeTimeline( + name = "live", + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem()) + ) + ) + ) + val matrixRoom = FakeMatrixRoom( + liveTimeline = liveTimeline + ) + val sut = TimelineController(matrixRoom) + assertThat(sut.timelineItems().first()).hasSize(1) + } + + @Test + fun `test invokeOnCurrentTimeline use the detached timeline and not the live timeline`() = runTest { + val lambdaForDetached = lambdaRecorder { _: String, _: String?, _: List -> + Result.success(Unit) + } + val lambdaForLive = lambdaRecorder(ensureNeverCalled = true) { _: String, _: String?, _: List -> + Result.success(Unit) + } + val liveTimeline = FakeTimeline(name = "live").apply { + sendMessageLambda = lambdaForLive + } + val detachedTimeline = FakeTimeline(name = "detached").apply { + sendMessageLambda = lambdaForDetached + } + val matrixRoom = FakeMatrixRoom( + liveTimeline = liveTimeline + ) + matrixRoom.givenTimelineFocusedOnEventResult(Result.success(detachedTimeline)) + val sut = TimelineController(matrixRoom) + sut.focusOnEvent(AN_EVENT_ID) + sut.activeTimelineFlow().test { + awaitItem().also { state -> + assertThat(state).isEqualTo(detachedTimeline) + } + sut.invokeOnCurrentTimeline { + sendMessage("body", "htmlBody", emptyList()) + } + lambdaForDetached.assertions().isCalledOnce() + } + } + + @Test + fun `test last forward pagination on a detached timeline should switch to live timeline`() = runTest { + val liveTimeline = FakeTimeline(name = "live") + val detachedTimeline = FakeTimeline(name = "detached") + val matrixRoom = FakeMatrixRoom( + liveTimeline = liveTimeline + ) + matrixRoom.givenTimelineFocusedOnEventResult(Result.success(detachedTimeline)) + val sut = TimelineController(matrixRoom) + + sut.activeTimelineFlow().test { + awaitItem().also { state -> + assertThat(state).isEqualTo(liveTimeline) + } + sut.focusOnEvent(AN_EVENT_ID) + awaitItem().also { state -> + assertThat(state).isEqualTo(detachedTimeline) + } + val paginateLambda = lambdaRecorder { _: Timeline.PaginationDirection -> + Result.success(true) + } + detachedTimeline.apply { + this.paginateLambda = paginateLambda + } + sut.paginate(Timeline.PaginationDirection.FORWARDS) + awaitItem().also { state -> + assertThat(state).isEqualTo(liveTimeline) + } + } + } +} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index d3d89a0788..7a6920e4dc 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -215,8 +215,14 @@ class FakeMatrixRoom( override val syncUpdateFlow: StateFlow = MutableStateFlow(0L) - override suspend fun timelineFocusedOnEvent(eventId: EventId): Result { - return Result.success(FakeTimeline()) + private var timelineFocusedOnEventResult: Result = Result.success(FakeTimeline()) + + fun givenTimelineFocusedOnEventResult(result: Result) { + timelineFocusedOnEventResult = result + } + + override suspend fun timelineFocusedOnEvent(eventId: EventId): Result = simulateLongTask { + timelineFocusedOnEventResult } override suspend fun subscribeToSync() = Unit diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt index c99698fcb4..6ec8386651 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt @@ -39,6 +39,7 @@ import kotlinx.coroutines.flow.StateFlow import java.io.File class FakeTimeline( + private val name: String = "FakeTimeline", override val timelineItems: Flow> = MutableStateFlow(emptyList()), private val backwardPaginationStatus: MutableStateFlow = MutableStateFlow( Timeline.PaginationStatus( @@ -360,5 +361,12 @@ class FakeTimeline( } } - override fun close() = Unit + var closeCounter = 0 + private set + + override fun close() { + closeCounter++ + } + + override fun toString() = "FakeTimeline: $name" } From 931ede8776f5ce6b016d4f1c8b3f335797e6f4ec Mon Sep 17 00:00:00 2001 From: ElementBot Date: Fri, 26 Apr 2024 16:37:12 +0000 Subject: [PATCH 197/289] Update screenshots --- ..._FocusRequestStateView-Day-65_65_null_0,NEXUS_5,1.0,en].png | 3 +++ ..._FocusRequestStateView-Day-65_65_null_1,NEXUS_5,1.0,en].png | 3 +++ ..._FocusRequestStateView-Day-65_65_null_2,NEXUS_5,1.0,en].png | 3 +++ ..._FocusRequestStateView-Day-65_65_null_3,NEXUS_5,1.0,en].png | 3 +++ ...ocusRequestStateView-Night-65_66_null_0,NEXUS_5,1.0,en].png | 3 +++ ...ocusRequestStateView-Night-65_66_null_1,NEXUS_5,1.0,en].png | 3 +++ ...ocusRequestStateView-Night-65_66_null_2,NEXUS_5,1.0,en].png | 3 +++ ...ocusRequestStateView-Night-65_66_null_3,NEXUS_5,1.0,en].png | 3 +++ ...essagesViewWithTyping-Day-66_66_null_0,NEXUS_5,1.0,en].png} | 0 ...essagesViewWithTyping-Day-66_66_null_1,NEXUS_5,1.0,en].png} | 0 ...essagesViewWithTyping-Day-66_66_null_2,NEXUS_5,1.0,en].png} | 0 ...sagesViewWithTyping-Night-66_67_null_0,NEXUS_5,1.0,en].png} | 0 ...sagesViewWithTyping-Night-66_67_null_1,NEXUS_5,1.0,en].png} | 0 ...sagesViewWithTyping-Night-66_67_null_2,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_0,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_1,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_2,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_3,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_4,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_5,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_6,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_7,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-67_67_null_8,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_0,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_1,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_2,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_3,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_4,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_5,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_6,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_7,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-67_68_null_8,NEXUS_5,1.0,en].png} | 0 32 files changed, 24 insertions(+) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_3,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_8,NEXUS_5,1.0,en].png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4e44ed5288 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf70dc030f96b929ba3817694a624de715b82719117fc75720c4e3ff8a8188c8 +size 9962 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f33e3346a2 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcf0155249cd3dd0851e0202f732f281fad30a1931e57077c44fdf19b2b90f44 +size 13680 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f33e3346a2 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcf0155249cd3dd0851e0202f732f281fad30a1931e57077c44fdf19b2b90f44 +size 13680 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..6a83c83c38 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5315224059776b19247788a9902939829733c5dd520cdfb95e6444509a4413ae +size 13932 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..825f2f46d5 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8b6b2f2e2c03e7927ccb93d4fa8e914f7a3a19f4526cda8237e324dda3d9d3f +size 7548 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..cc56b41fc3 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d5d4105517ea18a1e710be7ad727e096d641c07a29f4c72d3aac43d0330b2f3 +size 10957 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..cc56b41fc3 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d5d4105517ea18a1e710be7ad727e096d641c07a29f4c72d3aac43d0330b2f3 +size 10957 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..375ed72288 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9da3d0066a9f12a0826a20f760c9fddc5f58b1614406eff321a7fce1325803d +size 11165 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_8,NEXUS_5,1.0,en].png From 260c7af09640ae77d8fec7d4a1a53f44635a0354 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 18:49:56 +0200 Subject: [PATCH 198/289] Add unit test on TimelineItemIndexer --- .../impl/timeline/TimelineItemIndexerTest.kt | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexerTest.kt diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexerTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexerTest.kt new file mode 100644 index 0000000000..642f07a3f9 --- /dev/null +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexerTest.kt @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline + +import com.google.common.truth.Truth.assertThat +import io.element.android.features.messages.impl.timeline.model.TimelineItem +import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemReadMarkerModel +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.test.AN_EVENT_ID +import org.junit.Test + +class TimelineItemIndexerTest { + @Test + fun `test TimelineItemIndexer`() { + val eventIds = mutableListOf() + val data = listOf( + aTimelineItemEvent().also { eventIds.add(it.eventId!!) }, + aTimelineItemEvent().also { eventIds.add(it.eventId!!) }, + aGroupedEvents().also { groupedEvents -> + groupedEvents.events.forEach { eventIds.add(it.eventId!!) } + }, + TimelineItem.Virtual( + id = "dummy", + model = TimelineItemReadMarkerModel + ), + ) + assertThat(eventIds.size).isEqualTo(4) + val sut = TimelineItemIndexer() + sut.process(data) + eventIds.forEach { + assertThat(sut.isKnown(it)).isTrue() + } + assertThat(sut.indexOf(eventIds[0])).isEqualTo(0) + assertThat(sut.indexOf(eventIds[1])).isEqualTo(1) + assertThat(sut.indexOf(eventIds[2])).isEqualTo(2) + assertThat(sut.indexOf(eventIds[3])).isEqualTo(2) + + // Unknown event + assertThat(sut.isKnown(AN_EVENT_ID)).isFalse() + assertThat(sut.indexOf(AN_EVENT_ID)).isEqualTo(-1) + } +} From 8330fe79c81ea0faa65008ee20edad69f57a52bf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 26 Apr 2024 18:56:04 +0200 Subject: [PATCH 199/289] Make FocusRequestState immutable. --- .../android/features/messages/impl/timeline/TimelineState.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt index 592af0693d..c32dbad723 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineState.kt @@ -36,6 +36,7 @@ data class TimelineState( val hasAnyEvent = timelineItems.any { it is TimelineItem.Event } } +@Immutable sealed interface FocusRequestState { data object None : FocusRequestState data class Cached(val index: Int) : FocusRequestState From c8096d511d2a5fc738a7197db6b71a283ad74db6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:39:43 +0000 Subject: [PATCH 200/289] Update telephoto to v0.11.2 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3f877b3e05..83ca416a49 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,7 +39,7 @@ showkase = "1.0.2" appyx = "1.4.0" sqldelight = "2.0.2" wysiwyg = "2.37.0" -telephoto = "0.10.0" +telephoto = "0.11.2" # DI dagger = "2.51.1" From 4f82baa2b0add0709ac84939e761b5a2f1229556 Mon Sep 17 00:00:00 2001 From: bmarty <3940906+bmarty@users.noreply.github.com> Date: Mon, 29 Apr 2024 00:18:59 +0000 Subject: [PATCH 201/289] Sync Strings from Localazy --- .../src/main/res/values-de/translations.xml | 6 +- .../src/main/res/values-be/translations.xml | 6 +- .../src/main/res/values-cs/translations.xml | 4 +- .../src/main/res/values-de/translations.xml | 4 +- .../src/main/res/values-hu/translations.xml | 6 +- .../src/main/res/values-sk/translations.xml | 6 +- .../src/main/res/values-sv/translations.xml | 1 + .../impl/src/main/res/values/localazy.xml | 2 +- .../src/main/res/values-be/translations.xml | 2 + .../src/main/res/values-cs/translations.xml | 2 + .../src/main/res/values-de/translations.xml | 4 +- .../src/main/res/values-fr/translations.xml | 2 + .../src/main/res/values-hu/translations.xml | 2 + .../src/main/res/values-sk/translations.xml | 2 + .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-sv/translations.xml | 9 + .../src/main/res/values-sv/translations.xml | 3 + .../src/main/res/values-de/translations.xml | 8 +- .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-it/translations.xml | 2 + .../src/main/res/values-cs/translations.xml | 4 + .../src/main/res/values-de/translations.xml | 4 + .../src/main/res/values-fr/translations.xml | 4 + .../src/main/res/values-de/translations.xml | 30 +- .../src/main/res/values-it/translations.xml | 1 + .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-de/translations.xml | 4 +- .../src/main/res/values-be/translations.xml | 3 +- .../src/main/res/values-cs/translations.xml | 3 +- .../src/main/res/values-de/translations.xml | 3 +- .../src/main/res/values-fr/translations.xml | 1 + .../src/main/res/values-hu/translations.xml | 3 +- .../src/main/res/values-it/translations.xml | 6 +- .../src/main/res/values-sk/translations.xml | 3 +- .../src/main/res/values-sv/translations.xml | 4 +- .../src/main/res/values-be/translations.xml | 2 +- .../src/main/res/values-cs/translations.xml | 2 +- .../src/main/res/values-de/translations.xml | 16 +- .../src/main/res/values-fr/translations.xml | 2 +- .../src/main/res/values-in/translations.xml | 2 +- .../src/main/res/values-sk/translations.xml | 2 +- .../src/main/res/values-sv/translations.xml | 2 +- .../src/main/res/values-it/translations.xml | 5 + .../src/main/res/values-it/translations.xml | 18 + .../src/main/res/values-it/translations.xml | 11 + .../src/main/res/values-it/translations.xml | 4 + .../src/main/res/values-it/translations.xml | 6 + .../src/main/res/values-be/translations.xml | 4 + .../src/main/res/values-cs/translations.xml | 3 + .../src/main/res/values-de/translations.xml | 9 +- .../src/main/res/values-fr/translations.xml | 3 + .../src/main/res/values-hu/translations.xml | 3 + .../src/main/res/values-sk/translations.xml | 4 + .../src/main/res/values-sv/translations.xml | 7 + .../main/res/values-zh-rTW/translations.xml | 3 +- .../src/main/res/values/localazy.xml | 1 + ...acyOption-Day-1_2_null,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-3_4_null_0,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-3_4_null_1,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_5,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_6,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_7,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_8,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_9,NEXUS_5,1.0,de].png | 3 + ...oomView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 4 +- ...Content-Day-1_1_null_3,NEXUS_5,1.0,de].png | 4 +- ...edView-Day-36_36_null,NEXUS_5,1.0,de].png} | 0 ...teView-Day-41_41_null,NEXUS_5,1.0,de].png} | 0 ...View-Day-43_43_null_0,NEXUS_5,1.0,de].png} | 0 ...View-Day-43_43_null_1,NEXUS_5,1.0,de].png} | 0 ...View-Day-43_43_null_2,NEXUS_5,1.0,de].png} | 0 ...View-Day-43_43_null_3,NEXUS_5,1.0,de].png} | 0 ...edView-Day-44_44_null,NEXUS_5,1.0,de].png} | 0 ...wnView-Day-48_48_null,NEXUS_5,1.0,de].png} | 0 ...heet-Day-57_57_null_0,NEXUS_5,1.0,de].png} | 0 ...heet-Day-57_57_null_1,NEXUS_5,1.0,de].png} | 0 ...heet-Day-57_57_null_2,NEXUS_5,1.0,de].png} | 0 ...heet-Day-57_57_null_3,NEXUS_5,1.0,de].png} | 0 ...heet-Day-57_57_null_4,NEXUS_5,1.0,de].png} | 0 ...heet-Day-57_57_null_5,NEXUS_5,1.0,de].png} | 0 ...Menu-Day-58_58_null_1,NEXUS_5,1.0,de].png} | 0 ...nerView-Day-57_57_null,NEXUS_5,1.0,de].png | 3 - ...nerView-Day-59_59_null,NEXUS_5,1.0,de].png | 3 + ...erView-Day-61_61_null,NEXUS_5,1.0,de].png} | 0 ...ngView-Day-62_62_null,NEXUS_5,1.0,de].png} | 0 ...View-Day-16_16_null_2,NEXUS_5,1.0,de].png} | 0 ...View-Day-16_16_null_3,NEXUS_5,1.0,de].png} | 0 ...stamp-Day-18_18_null_2,NEXUS_5,1.0,de].png | 3 - ...stamp-Day-18_18_null_3,NEXUS_5,1.0,de].png | 3 - ...stamp-Day-20_20_null_2,NEXUS_5,1.0,de].png | 3 + ...stamp-Day-20_20_null_3,NEXUS_5,1.0,de].png | 3 + ...ctions-Day-21_21_null,NEXUS_5,1.0,de].png} | 0 ...tive-Day-23_23_null_0,NEXUS_5,1.0,de].png} | 0 ...tive-Day-23_23_null_1,NEXUS_5,1.0,de].png} | 0 ...eply-Day-24_24_null_4,NEXUS_5,1.0,de].png} | 0 ...eply-Day-24_24_null_8,NEXUS_5,1.0,de].png} | 0 ...llapse-Day-26_26_null,NEXUS_5,1.0,de].png} | 0 ...panded-Day-25_25_null,NEXUS_5,1.0,de].png} | 0 ...Layout-Day-27_27_null,NEXUS_5,1.0,de].png} | 0 ...coming-Day-30_30_null,NEXUS_5,1.0,de].png} | 0 ...tgoing-Day-31_31_null,NEXUS_5,1.0,de].png} | 0 ...neView-Day-9_9_null_0,NEXUS_5,1.0,de].png} | 0 ...neView-Day-9_9_null_1,NEXUS_5,1.0,de].png} | 0 ...eView-Day-9_9_null_11,NEXUS_5,1.0,de].png} | 0 ...eView-Day-9_9_null_12,NEXUS_5,1.0,de].png} | 0 ...eView-Day-9_9_null_13,NEXUS_5,1.0,de].png} | 0 ...eView-Day-9_9_null_14,NEXUS_5,1.0,de].png} | 0 ...eView-Day-9_9_null_15,NEXUS_5,1.0,de].png} | 0 ...eView-Day-9_9_null_16,NEXUS_5,1.0,de].png} | 0 ...neView-Day-9_9_null_4,NEXUS_5,1.0,de].png} | 0 ...neView-Day-9_9_null_6,NEXUS_5,1.0,de].png} | 0 ...neView-Day-9_9_null_8,NEXUS_5,1.0,de].png} | 0 ...ping-Day-65_65_null_0,NEXUS_5,1.0,de].png} | 0 ...ping-Day-65_65_null_1,NEXUS_5,1.0,de].png} | 0 ...View-Day-66_66_null_1,NEXUS_5,1.0,de].png} | 0 ...View-Day-66_66_null_2,NEXUS_5,1.0,de].png} | 0 ...View-Day-66_66_null_3,NEXUS_5,1.0,de].png} | 0 ...View-Day-66_66_null_4,NEXUS_5,1.0,de].png} | 0 ...View-Day-66_66_null_5,NEXUS_5,1.0,de].png} | 0 ...View-Day-66_66_null_6,NEXUS_5,1.0,de].png} | 0 ...gesView-Day-0_0_null_3,NEXUS_5,1.0,de].png | 4 +- ...ionView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 3 + ...ingOption-Day-7_8_null,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_0,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_1,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_2,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_3,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_4,NEXUS_5,1.0,de].png | 4 +- ...verView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...ditView-Day-0_1_null_0,NEXUS_5,1.0,de].png | 4 +- ...ditView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 4 +- ...ditView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...ditView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 4 +- ...ditView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 4 +- ...ditView-Day-0_1_null_5,NEXUS_5,1.0,de].png | 4 +- ...istView-Day-2_3_null_6,NEXUS_5,1.0,de].png | 4 +- ...ngsOption-Day-5_6_null,NEXUS_5,1.0,de].png | 4 +- ...sView-Day-11_12_null_0,NEXUS_5,1.0,de].png | 4 +- ...sView-Day-11_12_null_3,NEXUS_5,1.0,de].png | 4 +- ...sView-Day-11_12_null_4,NEXUS_5,1.0,de].png | 4 +- ...sView-Day-11_12_null_5,NEXUS_5,1.0,de].png | 4 +- ...sView-Day-11_12_null_6,NEXUS_5,1.0,de].png | 4 +- ...onsView-Day-8_9_null_0,NEXUS_5,1.0,de].png | 4 +- ...onsView-Day-8_9_null_1,NEXUS_5,1.0,de].png | 4 +- ...onsView-Day-8_9_null_3,NEXUS_5,1.0,de].png | 4 +- ...onsView-Day-8_9_null_6,NEXUS_5,1.0,de].png | 4 +- ...etailsDark--1_1_null_0,NEXUS_5,1.0,de].png | 4 +- ...etailsDark--1_1_null_1,NEXUS_5,1.0,de].png | 4 +- ...etailsDark--1_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...etailsDark--1_1_null_3,NEXUS_5,1.0,de].png | 4 +- ...etailsDark--1_1_null_4,NEXUS_5,1.0,de].png | 4 +- ...etailsDark--1_1_null_7,NEXUS_5,1.0,de].png | 4 +- ...etailsDark--1_1_null_8,NEXUS_5,1.0,de].png | 4 +- ...etailsDark--1_1_null_9,NEXUS_5,1.0,de].png | 4 +- ...oomDetails--0_0_null_0,NEXUS_5,1.0,de].png | 4 +- ...oomDetails--0_0_null_1,NEXUS_5,1.0,de].png | 4 +- ...oomDetails--0_0_null_2,NEXUS_5,1.0,de].png | 4 +- ...oomDetails--0_0_null_3,NEXUS_5,1.0,de].png | 4 +- ...oomDetails--0_0_null_4,NEXUS_5,1.0,de].png | 4 +- ...oomDetails--0_0_null_7,NEXUS_5,1.0,de].png | 4 +- ...oomDetails--0_0_null_8,NEXUS_5,1.0,de].png | 4 +- ...oomDetails--0_0_null_9,NEXUS_5,1.0,de].png | 4 +- ...oryView-Day-0_1_null_0,NEXUS_5,1.0,de].png | 4 +- ...oryView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 4 +- ...oryView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...oryView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 4 +- ...oryView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 4 +- ...eyBanner-Day-2_3_null,NEXUS_5,1.0,de].png} | 0 ...ndicator-Day-5_6_null,NEXUS_5,1.0,de].png} | 0 ...stTopBar-Day-4_5_null,NEXUS_5,1.0,de].png} | 0 ...ntView-Day-3_4_null_0,NEXUS_5,1.0,de].png} | 0 ...ntView-Day-3_4_null_1,NEXUS_5,1.0,de].png} | 0 ...ntView-Day-3_4_null_3,NEXUS_5,1.0,de].png} | 0 ...ntView-Day-3_4_null_4,NEXUS_5,1.0,de].png} | 0 ...maryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png | 3 + ...ryRow-Day-7_8_null_29,NEXUS_5,1.0,de].png} | 0 ...ryRow-Day-7_8_null_30,NEXUS_5,1.0,de].png} | 0 ...aryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png | 3 + ...rsView-Day-8_9_null_0,NEXUS_5,1.0,de].png} | 0 ...rsView-Day-8_9_null_1,NEXUS_5,1.0,de].png} | 0 ...eenView-Day-9_10_null,NEXUS_5,1.0,de].png} | 0 ...tent-Day-10_11_null_1,NEXUS_5,1.0,de].png} | 0 ...tent-Day-10_11_null_2,NEXUS_5,1.0,de].png} | 0 ...etContent-Day-0_1_null,NEXUS_5,1.0,de].png | 3 - ...Content-Day-0_1_null_0,NEXUS_5,1.0,de].png | 3 + ...ontent-Day-0_1_null_1,NEXUS_5,1.0,de].png} | 0 ...Content-Day-0_1_null_2,NEXUS_5,1.0,de].png | 3 + ...stView-Day-1_2_null_0,NEXUS_5,1.0,de].png} | 0 ...istView-Day-1_2_null_1,NEXUS_5,1.0,de].png | 3 + ...istView-Day-1_2_null_2,NEXUS_5,1.0,de].png | 3 + ...istView-Day-1_2_null_3,NEXUS_5,1.0,de].png | 3 + ...istView-Day-1_2_null_4,NEXUS_5,1.0,de].png | 3 + ...istView-Day-1_2_null_5,NEXUS_5,1.0,de].png | 3 + ...istView-Day-1_2_null_6,NEXUS_5,1.0,de].png | 3 + ...stView-Day-1_2_null_7,NEXUS_5,1.0,de].png} | 0 ...stView-Day-1_2_null_9,NEXUS_5,1.0,de].png} | 0 ...istView-Day-2_3_null_0,NEXUS_5,1.0,de].png | 3 - ...istView-Day-2_3_null_1,NEXUS_5,1.0,de].png | 3 - ...istView-Day-2_3_null_2,NEXUS_5,1.0,de].png | 3 - ...istView-Day-2_3_null_3,NEXUS_5,1.0,de].png | 3 - ...istView-Day-2_3_null_4,NEXUS_5,1.0,de].png | 3 - ...istView-Day-2_3_null_5,NEXUS_5,1.0,de].png | 3 - ...KeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png | 4 +- ...KeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png | 4 +- ...KeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png | 4 +- ...KeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png | 4 +- ...ionView-Day-0_1_null_8,NEXUS_5,1.0,de].png | 4 +- ...ectView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...ectView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 4 +- ...ectView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 4 +- ...oserReply-Day-3_4_null,NEXUS_5,1.0,de].png | 4 +- screenshots/html/data.js | 1322 +++++++++-------- 218 files changed, 1045 insertions(+), 890 deletions(-) create mode 100644 features/roomaliasresolver/impl/src/main/res/values-cs/translations.xml create mode 100644 features/roomaliasresolver/impl/src/main/res/values-de/translations.xml create mode 100644 features/roomaliasresolver/impl/src/main/res/values-fr/translations.xml create mode 100644 libraries/permissions/impl/src/main/res/values-it/translations.xml create mode 100644 libraries/pushproviders/firebase/src/main/res/values-it/translations.xml create mode 100644 libraries/pushproviders/unifiedpush/src/main/res/values-it/translations.xml create mode 100644 libraries/troubleshoot/impl/src/main/res/values-it/translations.xml create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,de].png => ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,de].png diff --git a/features/createroom/impl/src/main/res/values-de/translations.xml b/features/createroom/impl/src/main/res/values-de/translations.xml index 03b45ffa56..6c77a2ad28 100644 --- a/features/createroom/impl/src/main/res/values-de/translations.xml +++ b/features/createroom/impl/src/main/res/values-de/translations.xml @@ -2,12 +2,12 @@ "Neuer Raum" "Personen einladen" - "Beim Erstellen des Raums ist ein Fehler aufgetreten" - "Die Nachrichten in diesem Raum sind verschlüsselt. Die Verschlüsselung kann nicht nachträglich deaktiviert werden." + "Beim Erstellen des Chats ist ein Fehler aufgetreten" + "Die Nachrichten in diesem Chat sind verschlüsselt. Die Verschlüsselung kann nicht nachträglich deaktiviert werden." "Privater Raum (nur auf Einladung)" "Die Nachrichten sind nicht verschlüsselt und können von jedem gelesen werden. Die Verschlüsselung kann zu einem späteren Zeitpunkt aktiviert werden." "Öffentlicher Raum (für alle)" - "Raumname" + "Raum-Name" "Raum erstellen" "Thema (optional)" "Beim Versuch, einen Chat zu starten, ist ein Fehler aufgetreten" diff --git a/features/ftue/impl/src/main/res/values-be/translations.xml b/features/ftue/impl/src/main/res/values-be/translations.xml index 3c0afc305d..768a5db68a 100644 --- a/features/ftue/impl/src/main/res/values-be/translations.xml +++ b/features/ftue/impl/src/main/res/values-be/translations.xml @@ -2,15 +2,15 @@ "Вы можаце змяніць налады пазней." "Дазвольце апавяшчэнні і ніколі не прапускайце іх" - "Устанаўленне злучэння" + "Ўсталяванне бяспечнага злучэння" "Не атрымалася ўсталяваць бяспечнае злучэнне з новай прыладай. Існуючыя прылады па-ранейшаму ў бяспецы, і вам не трэба турбавацца пра іх." "Што зараз?" "Паспрабуйце зноў увайсці ў сістэму з дапамогай QR-кода, калі гэта была сеткавая праблема" "Калі вы сутыкнуліся з той жа праблемай, паспрабуйце іншую сетку Wi-Fi або скарыстайцеся мабільнымі дадзенымі замест Wi-Fi." "Калі гэта не дапамагло, увайдзіце ўручную" "Злучэнне небяспечнае" - "Вам будзе прапанавана ўвесці дзве лічбы, паказаныя ніжэй." - "Увядзіце нумар на прыладзе" + "Вам будзе прапанавана ўвесці дзве лічбы, паказаныя на гэтай прыладзе." + "Увядзіце наступны нумар на іншай прыладзе." "Адкрыйце %1$s на настольнай прыладзе" "Націсніце на свой аватар" "Выберыце %1$s" diff --git a/features/ftue/impl/src/main/res/values-cs/translations.xml b/features/ftue/impl/src/main/res/values-cs/translations.xml index c24c2027e7..17456a5eca 100644 --- a/features/ftue/impl/src/main/res/values-cs/translations.xml +++ b/features/ftue/impl/src/main/res/values-cs/translations.xml @@ -2,7 +2,7 @@ "Nastavení můžete později změnit." "Povolte oznámení a nezmeškejte žádnou zprávu" - "Navazování spojení" + "Navazování zabezpečeného spojení" "K novému zařízení se nepodařilo navázat bezpečné připojení. Vaše stávající zařízení jsou stále v bezpečí a nemusíte se o ně obávat." "Co teď?" "Zkuste se znovu přihlásit pomocí QR kódu v případě, že se jednalo o problém se sítí" @@ -10,7 +10,7 @@ "Pokud to nefunguje, přihlaste se ručně" "Připojení není zabezpečené" "Budete požádáni o zadání dvou níže uvedených číslic." - "Zadejte číslo na svém zařízení" + "Zadejte níže uvedené číslo na svém dalším zařízení" "Otevřete %1$s na stolním počítači" "Klikněte na svůj avatar" "Vybrat %1$s" diff --git a/features/ftue/impl/src/main/res/values-de/translations.xml b/features/ftue/impl/src/main/res/values-de/translations.xml index 771ffe682d..93ebf87261 100644 --- a/features/ftue/impl/src/main/res/values-de/translations.xml +++ b/features/ftue/impl/src/main/res/values-de/translations.xml @@ -2,7 +2,7 @@ "Du kannst deine Einstellungen später ändern." "Erlaube Benachrichtigungen und verpasse keine Nachricht" - "Verbindung aufbauen" + "Sichere Verbindung aufbauen" "Es konnte keine sichere Verbindung zu dem neuen Gerät hergestellt werden." "Und jetzt?" "Versuche, dich erneut mit einem QR-Code anzumelden, falls dies ein Netzwerkproblem war." @@ -10,7 +10,7 @@ "Wenn das nicht funktioniert, melde dich manuell an" "Die Verbindung ist nicht sicher" "Du wirst aufgefordert, die beiden unten abgebildeten Ziffern einzugeben." - "Nummer auf deinem Gerät eingeben" + "Trage die unten angezeigte Zahl auf einem anderen Device ein" "%1$s auf einem Desktop-Gerät öffnen" "Klick auf deinen Avatar" "Wähle %1$s" diff --git a/features/ftue/impl/src/main/res/values-hu/translations.xml b/features/ftue/impl/src/main/res/values-hu/translations.xml index 6354cbe278..2fce86ebbb 100644 --- a/features/ftue/impl/src/main/res/values-hu/translations.xml +++ b/features/ftue/impl/src/main/res/values-hu/translations.xml @@ -2,15 +2,15 @@ "A beállításokat később is módosíthatja." "Értesítések engedélyezése, hogy soha ne maradjon le egyetlen üzenetről sem" - "Kapcsolat létesítése" + "Biztonságos kapcsolat létesítése" "Nem sikerült biztonságos kapcsolatot létesíteni az új eszközzel. A meglévő eszközei továbbra is biztonságban vannak, és nem kell aggódnia miattuk." "Most mi lesz?" "Próbáljon meg újra bejelentkezni egy QR-kóddal, ha ez hálózati probléma volt." "Ha ugyanezzel a problémával találkozik, próbálkozzon másik Wi-Fi-hálózattal, vagy a Wi-Fi helyett használja a mobil-adatkapcsolatát" "Ha ez nem működik, jelentkezzen be kézileg" "A kapcsolat nem biztonságos" - "A rendszer kérni fogja, hogy adja meg az alábbi két számjegyet." - "Adja meg a számot az eszközén" + "A rendszer kérni fogja, hogy adja meg az alábbi két számjegyet az eszközén." + "Adja meg az alábbi számot a másik eszközén" "Nyissa meg az %1$set egy asztali eszközön" "Kattintson a profilképére" "Válassza ezt: %1$s" diff --git a/features/ftue/impl/src/main/res/values-sk/translations.xml b/features/ftue/impl/src/main/res/values-sk/translations.xml index dbcf53390e..cf184f6ddc 100644 --- a/features/ftue/impl/src/main/res/values-sk/translations.xml +++ b/features/ftue/impl/src/main/res/values-sk/translations.xml @@ -2,15 +2,15 @@ "Svoje nastavenia môžete neskôr zmeniť." "Povoľte oznámenia a nikdy nezmeškajte žiadnu správu" - "Nadväzovanie spojenia" + "Nadväzovanie bezpečného spojenia" "K novému zariadeniu sa nepodarilo vytvoriť bezpečné pripojenie. Vaše existujúce zariadenia sú stále v bezpečí a nemusíte sa o ne obávať." "Čo teraz?" "Skúste sa znova prihlásiť pomocou QR kódu v prípade, že ide o problém so sieťou" "Ak narazíte na rovnaký problém, vyskúšajte inú sieť Wi-Fi alebo namiesto siete Wi-Fi použite mobilné dáta" "Ak to nefunguje, prihláste sa manuálne" "Pripojenie nie je bezpečené" - "Budete vyzvaní na zadanie dvoch číslic uvedených nižšie." - "Zadajte číslo na svojom zariadení" + "Budete požiadaní o zadanie dvoch číslic zobrazených na tomto zariadení." + "Zadajte nižšie uvedené číslo na vašom druhom zariadení" "Otvorte %1$s na stolnom zariadení" "Kliknite na svoj obrázok" "Vyberte %1$s" diff --git a/features/ftue/impl/src/main/res/values-sv/translations.xml b/features/ftue/impl/src/main/res/values-sv/translations.xml index 31823cfaab..ca0f1776e8 100644 --- a/features/ftue/impl/src/main/res/values-sv/translations.xml +++ b/features/ftue/impl/src/main/res/values-sv/translations.xml @@ -2,6 +2,7 @@ "Du kan ändra dina inställningar senare." "Tillåt aviseringar och missa aldrig ett meddelande" + "Försök igen" "Samtal, omröstningar, sökning och mer kommer att läggas till senare i år." "Meddelandehistorik för krypterade rum är inte tillgänglig än." "Vi vill gärna höra från dig, låt oss veta vad du tycker via inställningssidan." diff --git a/features/ftue/impl/src/main/res/values/localazy.xml b/features/ftue/impl/src/main/res/values/localazy.xml index 6df14dc152..73db47aa81 100644 --- a/features/ftue/impl/src/main/res/values/localazy.xml +++ b/features/ftue/impl/src/main/res/values/localazy.xml @@ -2,7 +2,7 @@ "You can change your settings later." "Allow notifications and never miss a message" - "Establishing connection" + "Establishing a secure connection" "A secure connection could not be made to the new device. Your existing devices are still safe and you don\'t need to worry about them." "What now?" "Try signing in again with a QR code in case this was a network problem" diff --git a/features/joinroom/impl/src/main/res/values-be/translations.xml b/features/joinroom/impl/src/main/res/values-be/translations.xml index f02d8ff94a..a7b7017cc9 100644 --- a/features/joinroom/impl/src/main/res/values-be/translations.xml +++ b/features/joinroom/impl/src/main/res/values-be/translations.xml @@ -2,6 +2,8 @@ "Далучыцца да пакоя" "Націсніце, каб далучыцца" + "%1$s пакуль не падтрымлівае прасторы. Вы можаце атрымаць доступ да прастор праз вэб-старонку." + "Прасторы пакуль не падтрымліваюцца" "Націсніце кнопку ніжэй, і адміністратар пакоя атрымае апавяшчэнне. Вы зможаце далучыцца да размовы пасля зацвярджэння." "Вы павінны быць удзельнікам гэтага пакоя каб прагледзець гісторыю паведамленняў." "Вы хочаце далучыцца да гэтага пакоя?" diff --git a/features/joinroom/impl/src/main/res/values-cs/translations.xml b/features/joinroom/impl/src/main/res/values-cs/translations.xml index 9f175974ad..a357fab76b 100644 --- a/features/joinroom/impl/src/main/res/values-cs/translations.xml +++ b/features/joinroom/impl/src/main/res/values-cs/translations.xml @@ -2,6 +2,8 @@ "Připojit se do místnosti" "Zaklepejte a připojte se" + "%1$s zatím nepodporuje prostory. Prostory můžete používat na webu." + "Prostory zatím nejsou podporovány" "Klikněte na tlačítko níže a správce místnosti bude informován. Po schválení se budete moci připojit ke konverzaci." "Pro zobrazení historie zpráv musíte být členem této místnosti." "Chcete se připojit k této místnosti?" diff --git a/features/joinroom/impl/src/main/res/values-de/translations.xml b/features/joinroom/impl/src/main/res/values-de/translations.xml index c4aefdc126..95718ce371 100644 --- a/features/joinroom/impl/src/main/res/values-de/translations.xml +++ b/features/joinroom/impl/src/main/res/values-de/translations.xml @@ -2,7 +2,9 @@ "Raum beitreten" "Anklopfen" - "Klopfe an um einen Raumadministrator zu benachrichtigen. Nach der Freigabe kannst du dich an der Unterhaltung beteiligen." + "%1$s unterstützt noch keine Spaces. Du kannst auf Spaces im Web zugreifen." + "Spaces werden noch nicht unterstützt" + "Klopfe an um einen Administrator zu benachrichtigen. Nach der Freigabe kannst du dich an der Unterhaltung beteiligen." "Du musst Mitglied in diesem Raum sein, um den Nachrichtenverlauf zu sehen." "Willst du diesem Raum beitreten?" "Vorschau nicht verfügbar" diff --git a/features/joinroom/impl/src/main/res/values-fr/translations.xml b/features/joinroom/impl/src/main/res/values-fr/translations.xml index b2e56edb23..b8847cf47b 100644 --- a/features/joinroom/impl/src/main/res/values-fr/translations.xml +++ b/features/joinroom/impl/src/main/res/values-fr/translations.xml @@ -2,6 +2,8 @@ "Rejoindre" "Demander à joindre" + "Les Spaces ne sont pas encore pris en charge par %1$s . Vous pouvez voir les Spaces sur le Web." + "Les Spaces ne sont pas encore pris en charge" "Cliquez ci-dessous et un administrateur sera prévenu. Une fois votre demande approuvée, pour pourrez rejoindre la discussion." "Vous devez être un membre du salon pour pouvoir lire l’historique des messages." "Vous souhaitez rejoindre ce salon?" diff --git a/features/joinroom/impl/src/main/res/values-hu/translations.xml b/features/joinroom/impl/src/main/res/values-hu/translations.xml index 505fe1a955..df9f3e8806 100644 --- a/features/joinroom/impl/src/main/res/values-hu/translations.xml +++ b/features/joinroom/impl/src/main/res/values-hu/translations.xml @@ -2,6 +2,8 @@ "Csatlakozás a szobához" "Kopogtasson a csatlakozáshoz" + "Az %1$s még nem támogatja a tereket. A tereket a weben érheti el." + "A terek még nem támogatottak" "Kattintson az alábbi gombra, és a szoba adminisztrátora értesítést kap. A jóváhagyást követően csatlakozhat a beszélgetéshez." "Az üzenetelőzmények megtekintéséhez a szoba tagjának kell lennie." "Csatlakozna ehhez a szobához?" diff --git a/features/joinroom/impl/src/main/res/values-sk/translations.xml b/features/joinroom/impl/src/main/res/values-sk/translations.xml index 9a6e87c183..13f91469fd 100644 --- a/features/joinroom/impl/src/main/res/values-sk/translations.xml +++ b/features/joinroom/impl/src/main/res/values-sk/translations.xml @@ -2,6 +2,8 @@ "Pripojiť sa do miestnosti" "Zaklopaním sa pripojíte" + "%1$s zatiaľ nepodporuje priestory. K priestorom môžete pristupovať na webe." + "Priestory zatiaľ nie sú podporované" "Kliknite na tlačidlo nižšie a správca miestnosti bude informovaný. Po schválení sa budete môcť pripojiť ku konverzácii." "Ak chcete zobraziť históriu správ, musíte byť členom tejto miestnosti." "Chcete sa pripojiť do tejto miestnosti?" diff --git a/features/leaveroom/api/src/main/res/values-de/translations.xml b/features/leaveroom/api/src/main/res/values-de/translations.xml index e684dd1e42..5c4928257c 100644 --- a/features/leaveroom/api/src/main/res/values-de/translations.xml +++ b/features/leaveroom/api/src/main/res/values-de/translations.xml @@ -1,7 +1,7 @@ "Bist du sicher, dass du diese Unterhaltung verlassen willst? Diese Unterhaltung ist nicht öffentlich und du kannst ihr ohne Einladung nicht wieder beitreten." - "Bist du sicher, dass du diesen Raum verlassen möchtest? Du bist die einzige Person hier. Wenn du austritst, kann in Zukunft niemand mehr eintreten, auch du nicht." + "Bist du sicher, dass du diesen Raum verlassen möchtest? Du bist die einzige Person hier. Wenn du gehst, kann in Zukunft niemand mehr eintreten, auch du nicht." "Bist du sicher, dass du diesen Raum verlassen möchtest? Dieser Raum ist nicht öffentlich und du kannst ihm ohne Einladung nicht erneut beitreten." "Bist du sicher, dass du den Raum verlassen willst?" diff --git a/features/lockscreen/impl/src/main/res/values-sv/translations.xml b/features/lockscreen/impl/src/main/res/values-sv/translations.xml index 636d477498..67c069affe 100644 --- a/features/lockscreen/impl/src/main/res/values-sv/translations.xml +++ b/features/lockscreen/impl/src/main/res/values-sv/translations.xml @@ -6,6 +6,15 @@ "Ta bort PIN-kod" "Är du säker på att du vill ta bort PIN-koden?" "Ta bort PIN-koden?" + "Välj PIN-kod" + "Bekräfta PIN-kod" + "Du kan inte välja detta som din PIN-kod av säkerhetsskäl" + "Välj en annan PIN-kod" + "Lås %1$s för att lägga till extra säkerhet i dina chattar. + +Välj något minnesvärt. Om du glömmer den här PIN-koden loggas du ut från appen." + "Ange samma PIN-kod två gånger" + "PIN-koder matchar inte" "Du måste logga in igen och skapa en ny PIN-kod för att fortsätta" "Du blir utloggad" diff --git a/features/logout/impl/src/main/res/values-sv/translations.xml b/features/logout/impl/src/main/res/values-sv/translations.xml index 019939ac0a..d1c1369e14 100644 --- a/features/logout/impl/src/main/res/values-sv/translations.xml +++ b/features/logout/impl/src/main/res/values-sv/translations.xml @@ -4,5 +4,8 @@ "Logga ut" "Logga ut" "Loggar ut …" + "Du har stängt av säkerhetskopiering" "Logga ut" + "Du är på väg att logga ut ur din sista session. Om du loggar ut nu förlorar du åtkomsten till dina krypterade meddelanden." + "Återställning inte inställd" diff --git a/features/messages/impl/src/main/res/values-de/translations.xml b/features/messages/impl/src/main/res/values-de/translations.xml index ddc498a6a9..785a615cab 100644 --- a/features/messages/impl/src/main/res/values-de/translations.xml +++ b/features/messages/impl/src/main/res/values-de/translations.xml @@ -20,11 +20,11 @@ "Standort" "Umfrage" "Textformatierung" - "Der Nachrichtenverlauf ist derzeit in diesem Raum nicht verfügbar" - "Der Nachrichtenverlauf ist in diesem Raum nicht verfügbar. Verifiziere dieses Gerät, um deinen Nachrichtenverlauf zu sehen." + "Der Nachrichtenverlauf ist derzeit nicht verfügbar" + "Der Nachrichtenverlauf ist nicht verfügbar. Verifiziere dieses Gerät, um deinen Nachrichtenverlauf zu sehen." "Möchtest du sie wieder einladen?" "Du bist allein in diesem Chat" - "Den ganzen Raum benachrichtigen" + "Alle Mitglieder benachrichtigen" "Alle" "Erneut senden" "Deine Nachricht konnte nicht gesendet werden" @@ -33,7 +33,7 @@ "Dies ist der Anfang dieses Gesprächs." "Weniger anzeigen" "Nachricht wurde kopiert" - "Du bist nicht berechtigt, in diesem Raum zu posten" + "Du bist nicht berechtigt, in diesem Raum zu schreiben" "Weniger anzeigen" "Mehr anzeigen" "Neu" diff --git a/features/preferences/impl/src/main/res/values-de/translations.xml b/features/preferences/impl/src/main/res/values-de/translations.xml index 65b4923452..1faac8c4eb 100644 --- a/features/preferences/impl/src/main/res/values-de/translations.xml +++ b/features/preferences/impl/src/main/res/values-de/translations.xml @@ -39,7 +39,7 @@ Wenn du fortfährst, können sich einige deiner Einstellungen ändern." "Die Konfiguration wurde nicht korrigiert, bitte versuche es erneut." "Gruppenchats" "Einladungen" - "Dein Homeserver unterstützt diese Option in verschlüsselten Räumen nicht. In einigen Räumen wirst du möglicherweise nicht benachrichtigt." + "Dein Homeserver unterstützt diese Option in verschlüsselten Chat nicht. In einigen Chats wirst du möglicherweise nicht benachrichtigt." "Erwähnungen" "Alle" "Erwähnungen" diff --git a/features/preferences/impl/src/main/res/values-it/translations.xml b/features/preferences/impl/src/main/res/values-it/translations.xml index 8b0c6baa64..e15213218c 100644 --- a/features/preferences/impl/src/main/res/values-it/translations.xml +++ b/features/preferences/impl/src/main/res/values-it/translations.xml @@ -49,4 +49,6 @@ Se procedi, alcune delle tue impostazioni potrebbero cambiare." "impostazioni di sistema" "Notifiche di sistema disattivate" "Notifiche" + "Risoluzione dei problemi" + "Risoluzione di problemi delle notifiche" diff --git a/features/roomaliasresolver/impl/src/main/res/values-cs/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-cs/translations.xml new file mode 100644 index 0000000000..234a9f7198 --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values-cs/translations.xml @@ -0,0 +1,4 @@ + + + "Nepodařilo se přeložit alias místnosti." + diff --git a/features/roomaliasresolver/impl/src/main/res/values-de/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-de/translations.xml new file mode 100644 index 0000000000..0ed5be402b --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values-de/translations.xml @@ -0,0 +1,4 @@ + + + "Der Raum-Alias konnte nicht ermittelt werden." + diff --git a/features/roomaliasresolver/impl/src/main/res/values-fr/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-fr/translations.xml new file mode 100644 index 0000000000..72395bbb06 --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values-fr/translations.xml @@ -0,0 +1,4 @@ + + + "Impossible de trouver un salon avec cet alias." + diff --git a/features/roomdetails/impl/src/main/res/values-de/translations.xml b/features/roomdetails/impl/src/main/res/values-de/translations.xml index 5a403643c6..dfecc5eb75 100644 --- a/features/roomdetails/impl/src/main/res/values-de/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-de/translations.xml @@ -7,7 +7,7 @@ "Der Nutzer kann dir wieder Nachrichten senden & alle Nachrichten des Nutzers werden wieder angezeigt." "Blockierung aufheben" "Beim Aktualisieren der Benachrichtigungseinstellungen ist ein Fehler aufgetreten." - "Dein Homeserver unterstützt diese Option in verschlüsselten Räumen nicht. In einigen Räumen wirst du möglicherweise nicht benachrichtigt." + "Dein Homeserver unterstützt diese Option in verschlüsselten Chat nicht. In einigen Chats wirst du möglicherweise nicht benachrichtigt." "Umfragen" "Nur Administratoren" "Mitglieder sperren" @@ -18,10 +18,10 @@ "Nachrichten senden & löschen" "Administratoren und Moderatoren" "Personen entfernen" - "Raum-Avatar ändern" - "Raumdetails anpassen" - "Raumname ändern" - "Raumthema ändern" + "Avatar ändern" + "Raum-Details anpassen" + "Raum-Name ändern" + "Raum-Thema ändern" "Nachrichten senden" "Admins bearbeiten" "Du kannst diese Aktion nicht mehr rückgängig machen. Du vergibst dieselbe Rolle, wie auch Du sie hast." @@ -47,19 +47,19 @@ "Nachrichten und Anrufe sind Ende-zu-Ende verschlüsselt. Nur du und die Empfänger haben die eindeutigen Schlüssel, um sie zu entsperren." "Nachrichtenverschlüsselung aktiviert" "Beim Laden der Benachrichtigungseinstellungen ist ein Fehler aufgetreten." - "Die Stummschaltung dieses Raums ist fehlgeschlagen, bitte versuche es erneut." - "Die Deaktivierung der Stummschaltung dieses Raums ist fehlgeschlagen, bitte versuche es erneut." + "Die Stummschaltung ist fehlgeschlagen, bitte versuche es erneut." + "Die Deaktivierung der Stummschaltung ist fehlgeschlagen, bitte versuche es erneut." "Personen einladen" "Unterhaltung verlassen" - "Raum verlassen" + "Verlassen" "Benutzerdefiniert" "Standard" "Benachrichtigungen" "Rollen und Berechtigungen" - "Raumname" + "Raum-Name" "Sicherheit" - "Raum teilen" - "Raum Informationen" + "Teilen" + "Informationen" "Thema" "Raum wird aktualisiert…" "Sperren" @@ -86,7 +86,7 @@ "%1$s wird entfernt." "Administrator" "Moderator" - "Raummitglieder" + "Mitglieder" "%1$s wird entsperrt." "Benutzerdefinierte Einstellungen verwenden" "Wenn du diese Option aktivierst, wird deine Standardeinstellung außer Kraft gesetzt." @@ -98,10 +98,10 @@ "Beim Laden der Benachrichtigungseinstellungen ist ein Fehler aufgetreten." "Fehler beim Wiederherstellen des Standardmodus. Bitte versuche es erneut." "Fehler beim Einstellen des Modus. Bitte versuche es erneut." - "Dein Homeserver unterstützt diese Option in verschlüsselten Räumen nicht. Du wirst in diesem Raum nicht benachrichtigt." + "Dein Homeserver unterstützt diese Option in verschlüsselten Chats nicht. Du wirst in diesem Chat nicht benachrichtigt." "Alle Nachrichten" "Nur Erwähnungen und Schlüsselwörter" - "Benachrichtige mich in diesem Raum bei" + "Benachrichtige mich bei" "Administratoren" "Ändere meine Rolle" "Zum Mitglied herabstufen" @@ -114,7 +114,7 @@ "Sobald Sie die Berechtigungen zurücksetzen, verlieren Sie die aktuellen Einstellungen." "Berechtigungen zurücksetzen?" "Rollen" - "Raumdetails anpassen" + "Raum-Details anpassen" "Rollen und Berechtigungen" "Beim Versuch, einen Chat zu starten, ist ein Fehler aufgetreten" diff --git a/features/roomdetails/impl/src/main/res/values-it/translations.xml b/features/roomdetails/impl/src/main/res/values-it/translations.xml index 8326d592e8..3c5659a3f7 100644 --- a/features/roomdetails/impl/src/main/res/values-it/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-it/translations.xml @@ -29,6 +29,7 @@ "Declassa" "Non potrai annullare questa modifica perché ti stai declassando, se sei l\'ultimo utente privilegiato nella stanza, sarà impossibile riottenere i privilegi." "Declassare te stesso?" + "%1$s (In attesa)" "Modifica moderatori" "Amministratori" "Moderatori" diff --git a/features/roomdirectory/impl/src/main/res/values-de/translations.xml b/features/roomdirectory/impl/src/main/res/values-de/translations.xml index 8c60d845b2..ea81cdb862 100644 --- a/features/roomdirectory/impl/src/main/res/values-de/translations.xml +++ b/features/roomdirectory/impl/src/main/res/values-de/translations.xml @@ -1,5 +1,5 @@ "Fehler beim Laden" - "Raumverzeichnis" + "Raum-Verzeichnis" diff --git a/features/roomlist/impl/src/main/res/values-de/translations.xml b/features/roomlist/impl/src/main/res/values-de/translations.xml index ab13ac8bf7..36442d6f7e 100644 --- a/features/roomlist/impl/src/main/res/values-de/translations.xml +++ b/features/roomlist/impl/src/main/res/values-de/translations.xml @@ -10,7 +10,7 @@ "%1$s (%2$s) hat dich eingeladen" "Dies ist ein einmaliger Vorgang, danke fürs Warten." "Dein Konto wird eingerichtet." - "Eine neue Unterhaltung oder einen neuen Raum erstellen" + "Eine Unterthaltung oder Raum erstellen" "Beginne, indem du jemandem eine Nachricht sendest." "Noch keine Chats." "Favoriten" @@ -25,7 +25,7 @@ Um deine anderen Chats zu sehen wähle diesen Filter ab." "Personen" "Du hast noch keine Direktnachrichten" "Räume" - "Du bist noch in keinem Raum." + "Du hast noch keine Chats." "Ungelesen" "Glückwunsch! Du hast keine ungelesenen Nachrichten!" diff --git a/features/securebackup/impl/src/main/res/values-be/translations.xml b/features/securebackup/impl/src/main/res/values-be/translations.xml index abf12d905c..b4a71d766f 100644 --- a/features/securebackup/impl/src/main/res/values-be/translations.xml +++ b/features/securebackup/impl/src/main/res/values-be/translations.xml @@ -35,8 +35,9 @@ "Калі ў вас ёсць ключ аднаўлення або парольная фраза, гэта таксама будзе працаваць." "Ключ аднаўлення або код доступу" "Увесці…" + "Страцілі ключ аднаўлення?" "Ключ аднаўлення пацверджаны" - "Увядзіце ключ аднаўлення або код доступу" + "Увядзіце ключ аднаўлення" "Ключ аднаўлення скапіраваны" "Стварэнне…" "Захаваць ключ аднаўлення" diff --git a/features/securebackup/impl/src/main/res/values-cs/translations.xml b/features/securebackup/impl/src/main/res/values-cs/translations.xml index 5f9ef80e54..18255155d2 100644 --- a/features/securebackup/impl/src/main/res/values-cs/translations.xml +++ b/features/securebackup/impl/src/main/res/values-cs/translations.xml @@ -35,8 +35,9 @@ "Pokud máte bezpečnostní klíč nebo bezpečnostní frázi, bude to fungovat také." "Klíč pro obnovení nebo přístupový kód" "Zadejte…" + "Ztratili jste klíč pro obnovení?" "Klíč pro obnovení potvrzen" - "Potvrďte klíč pro obnovení" + "Zadejte klíč pro obnovení" "Klíč pro obnovení zkopírován" "Generování…" "Uložit klíč pro obnovení" diff --git a/features/securebackup/impl/src/main/res/values-de/translations.xml b/features/securebackup/impl/src/main/res/values-de/translations.xml index 345bd06de1..c7a4eca7d3 100644 --- a/features/securebackup/impl/src/main/res/values-de/translations.xml +++ b/features/securebackup/impl/src/main/res/values-de/translations.xml @@ -55,8 +55,9 @@ " oder Passcode" "Eingeben…" + "Hast Du Deinen Wiederherstellungschlüssel vergessen?" "Wiederherstellungsschlüssel bestätigt" - "Wiederherstellungsschlüssel oder Passcode bestätigen" + "Bitte Wiederherstellungsschlüssel eingeben" "Wiederherstellungsschlüssel kopiert" "Generieren…" "Wiederherstellungsschlüssel speichern" diff --git a/features/securebackup/impl/src/main/res/values-fr/translations.xml b/features/securebackup/impl/src/main/res/values-fr/translations.xml index 1e68e15bb9..67ce8fe986 100644 --- a/features/securebackup/impl/src/main/res/values-fr/translations.xml +++ b/features/securebackup/impl/src/main/res/values-fr/translations.xml @@ -35,6 +35,7 @@ "Si vous avez une clé de sécurité ou une phrase de sécurité, cela fonctionnera également." "Clé de récupération" "Saisissez la clé ici…" + "Clé de récupération perdue?" "Clé de récupération confirmée" "Saisissez votre clé de récupération" "Clé de récupération copiée" diff --git a/features/securebackup/impl/src/main/res/values-hu/translations.xml b/features/securebackup/impl/src/main/res/values-hu/translations.xml index 5247d12693..ffa1c31be3 100644 --- a/features/securebackup/impl/src/main/res/values-hu/translations.xml +++ b/features/securebackup/impl/src/main/res/values-hu/translations.xml @@ -35,8 +35,9 @@ "Ha van biztonsági kulcsa vagy biztonsági jelmondata, akkor ez is fog működni." "Helyreállítási kulcs vagy jelkód" "Megadás…" + "Elvesztette a helyreállítási kulcsát?" "Helyreállítási kulcs megerősítve" - "Adja meg a helyreállítási kulcsát vagy a jelkódját" + "Adja meg a helyreállítási kulcsát" "Helyreállítási kulcs másolva" "Előállítás…" "Helyreállítási kulcs mentése" diff --git a/features/securebackup/impl/src/main/res/values-it/translations.xml b/features/securebackup/impl/src/main/res/values-it/translations.xml index 60211a4347..ba2948e8a5 100644 --- a/features/securebackup/impl/src/main/res/values-it/translations.xml +++ b/features/securebackup/impl/src/main/res/values-it/translations.xml @@ -21,13 +21,13 @@ "Assicurati di conservare la chiave di recupero in un posto sicuro" "Chiave di recupero cambiata" "Cambiare la chiave di recupero?" - "Inserisci la tua chiave di recupero per confermare l\'accesso al backup della chat." + "Assicurati che nessuno possa vedere questa schermata!" "Riprova per confermare l\'accesso al backup della chat." "Chiave di recupero errata" - "Inserisci il codice di 48 caratteri." + "Se hai una chiave di sicurezza o una password, andrà bene anche questo." "Inserisci…" "Chiave di recupero confermata" - "Conferma la chiave di recupero" + "Inserisci la chiave o password di recupero" "Chiave di recupero copiata" "Generazione…" "Salva la chiave di recupero" diff --git a/features/securebackup/impl/src/main/res/values-sk/translations.xml b/features/securebackup/impl/src/main/res/values-sk/translations.xml index d83efc0adb..64ec3c7fac 100644 --- a/features/securebackup/impl/src/main/res/values-sk/translations.xml +++ b/features/securebackup/impl/src/main/res/values-sk/translations.xml @@ -35,8 +35,9 @@ "Ak máte bezpečnostný kľúč alebo bezpečnostnú frázu, bude to fungovať tiež." "Kľúč na obnovenie alebo prístupový kód" "Zadať…" + "Stratili ste kľúč na obnovenie?" "Kľúč na obnovu potvrdený" - "Zadajte kľúč na obnovenie alebo prístupový kód" + "Zadajte kľúč na obnovenie" "Skopírovaný kľúč na obnovenie" "Generovanie…" "Uložiť kľúč na obnovenie" diff --git a/features/securebackup/impl/src/main/res/values-sv/translations.xml b/features/securebackup/impl/src/main/res/values-sv/translations.xml index 99c9c97b8a..3b36ee9a43 100644 --- a/features/securebackup/impl/src/main/res/values-sv/translations.xml +++ b/features/securebackup/impl/src/main/res/values-sv/translations.xml @@ -21,8 +21,8 @@ "Se till att du kan lagra din återställningsnyckel någonstans säkert" "Återställningsnyckel ändrad" "Byt återställningsnyckel?" - "Ange din återställningsnyckel för att bekräfta åtkomst till din chattsäkerhetskopia." - "Ange koden på 48 tecken." + "Se till att ingen kan se den här skärmen" + "Om du har en säkerhetsnyckel eller säkerhetsfras så funkar den också." "Ange …" "Återställningsnyckel bekräftad" "Ange din återställningsnyckel" diff --git a/libraries/eventformatter/impl/src/main/res/values-be/translations.xml b/libraries/eventformatter/impl/src/main/res/values-be/translations.xml index 224c63b03d..dcc942e4fc 100644 --- a/libraries/eventformatter/impl/src/main/res/values-be/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-be/translations.xml @@ -30,7 +30,7 @@ "Вы далучыліся да пакоя" "%1$s прасіў(-ла) далучыцца" "%1$s дазволіў(-ла) %2$s далучыцца" - "%1$s дазволіў(-ла) вам далучыцца" + "Вы дазволілі %1$s далучыцца" "Вы прасілі далучыцца" "%1$s адхіліў(-ла) %2$s запыт на далучэнне" "Вы адхілілі %1$s запыт на далучэнне" diff --git a/libraries/eventformatter/impl/src/main/res/values-cs/translations.xml b/libraries/eventformatter/impl/src/main/res/values-cs/translations.xml index 106b41dac6..e99778b71c 100644 --- a/libraries/eventformatter/impl/src/main/res/values-cs/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-cs/translations.xml @@ -30,7 +30,7 @@ "Vstoupili jste do místnosti" "%1$s požádal(a) o vstup" "%1$s povolil(a) vstoupit %2$s" - "%1$s vám povolil(a) vstoupit" + "Povolili jste %1$s vstoupit" "Požádali jste o vstup" "%1$s zamítl(a) žádost %2$s o vstup" "Zamítli jste žádost %1$s o vstup" diff --git a/libraries/eventformatter/impl/src/main/res/values-de/translations.xml b/libraries/eventformatter/impl/src/main/res/values-de/translations.xml index ad6e614195..597632a1f6 100644 --- a/libraries/eventformatter/impl/src/main/res/values-de/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-de/translations.xml @@ -30,7 +30,7 @@ "Du hast den Raum betreten" "%1$s hat angefragt beizutreten" "%1$s hat %2$s den Beitritt erlaubt" - "%1$s hat Ihnen den Betritt erlaubt" + "Du hast %1$s den Beitritt erlaubt." "Du hast angefragt beizutreten" "%1$s hat die Beitrittsanfrage von %2$s abgelehnt" "Du hast die Beitrittsanfrage von %1$s abgelehnt" @@ -39,10 +39,10 @@ "Du hast deine Beitrittsanfrage zurückgezogen" "%1$s hat den Raum verlassen" "Du hast den Raum verlassen" - "%1$s hat den Raumnamen geändert in: %2$s" - "Du hast den Raumnamen geändert in: %1$s" - "%1$s hat den Raumnamen entfernt" - "Du hast den Raumnamen entfernt" + "%1$s hat den Raum-Namen geändert in: %2$s" + "Du hast den Raum-Namen geändert in: %1$s" + "%1$s hat den Raum-Namen entfernt" + "Du hast den Raum-Namen entfernt" "%1$shat keine Änderungen vorgenommen" "Du hast keine Änderungen vorgenommen" "%1$s hat die Einladung abgelehnt" @@ -55,9 +55,9 @@ "Du hast die Einladung an %1$s zum Betreten des Raums zurückgezogen" "%1$s hat das Thema geändert in: %2$s" "Du hast das Thema geändert in: %1$s" - "%1$s hat das Raumthema entfernt" - "Du hast das Raumthema entfernt" + "%1$s hat das Raum-Thema entfernt" + "Du hast das Raum-Thema entfernt" "%1$s hat die Sperre für %2$s aufgehoben" "Du hast die Sperre für %1$s aufgehoben" - "%1$s hat eine unbekannte Raumänderung vorgenommen" + "%1$s hat eine unbekannte Änderung vorgenommen" diff --git a/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml b/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml index 7a5fd1a2bd..b6e0f3b32d 100644 --- a/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml @@ -30,7 +30,7 @@ "Vous avez rejoint le salon" "%1$s a demandé à rejoindre" "%1$s a autorisé %2$s à rejoindre" - "%1$s vous a autorisé à rejoindre" + "Vous avez autoriser %1$s à joindre le salon" "Vous avez demandé à rejoindre" "%1$s a rejeté la demande de %2$s pour rejoindre" "Vous avez rejeté la demande de %1$s pour rejoindre" diff --git a/libraries/eventformatter/impl/src/main/res/values-in/translations.xml b/libraries/eventformatter/impl/src/main/res/values-in/translations.xml index cf74867ef9..ae81eab3f1 100644 --- a/libraries/eventformatter/impl/src/main/res/values-in/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-in/translations.xml @@ -30,7 +30,7 @@ "Anda bergabung ke ruangan" "%1$s meminta untuk bergabung" "%1$s memperbolehkan %2$s untuk bergabung" - "%1$s memperbolehkan Anda untuk bergabung" + "Anda memperbolehkan %1$s untuk bergabung" "Anda meminta untuk bergabung" "%1$s menolak permintaan %2$s untuk bergabung" "Anda menolak permintaan %1$s untuk bergabung" diff --git a/libraries/eventformatter/impl/src/main/res/values-sk/translations.xml b/libraries/eventformatter/impl/src/main/res/values-sk/translations.xml index 4af6956f3e..9a9f41a3fb 100644 --- a/libraries/eventformatter/impl/src/main/res/values-sk/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-sk/translations.xml @@ -30,7 +30,7 @@ "Vstúpili ste do miestnosti" "%1$s požiadal o pripojenie" "%1$s umožnil/a používateľovi %2$s pripojiť sa" - "%1$s vám umožnil/a pripojiť sa" + "Povolili ste používateľovi %1$s, aby sa pripojil" "Požiadali ste o pripojenie" "%1$s odmietol/a žiadosť používateľa %2$s o vstup" "Odmietli ste žiadosť používateľa %1$s o pripojenie" diff --git a/libraries/eventformatter/impl/src/main/res/values-sv/translations.xml b/libraries/eventformatter/impl/src/main/res/values-sv/translations.xml index ffe24c4f09..756b11e81d 100644 --- a/libraries/eventformatter/impl/src/main/res/values-sv/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-sv/translations.xml @@ -26,7 +26,7 @@ "Du gick med i rummet" "%1$s begärde att gå med" "%1$s tillät %2$s att gå med" - "%1$s tillät dig att gå med" + "Du lät %1$s att gå med" "Du begärde att gå med" "%1$s avvisade begäran från %2$s om att gå med" "Du avvisade begäran från %1$s om att gå med" diff --git a/libraries/permissions/impl/src/main/res/values-it/translations.xml b/libraries/permissions/impl/src/main/res/values-it/translations.xml new file mode 100644 index 0000000000..2b2b4c4b2a --- /dev/null +++ b/libraries/permissions/impl/src/main/res/values-it/translations.xml @@ -0,0 +1,5 @@ + + + "Verifica che l\'applicazione possa mostrare le notifiche." + "Controlla autorizzazioni" + diff --git a/libraries/push/impl/src/main/res/values-it/translations.xml b/libraries/push/impl/src/main/res/values-it/translations.xml index 74dabeced7..fe52cd7433 100644 --- a/libraries/push/impl/src/main/res/values-it/translations.xml +++ b/libraries/push/impl/src/main/res/values-it/translations.xml @@ -50,4 +50,22 @@ "Sincronizzazione in background" "Servizi Google" "Google Play Services non trovato. Le notifiche non funzioneranno bene." + "Ottieni il nome del fornitore attuale." + "Nessun provider push selezionato." + "Provider push attuale: %1$s." + "Provider push attuale" + "Assicurati che l\'applicazione abbia almeno un fornitore push." + "Nessun provider push trovato." + + "Provider %1$d push trovato: %2$s" + "Provider %1$d push trovati: %2$s" + + "Rileva i provider di servizi push" + "Verifica che l\'applicazione possa mostrare una notifica." + "La notifica non è stata cliccata." + "Impossibile visualizzare la notifica." + "La notifica è stata cliccata!" + "Mostra notifica" + "Clicca sulla notifica per continuare il test." + "Errore: %1$s." diff --git a/libraries/pushproviders/firebase/src/main/res/values-it/translations.xml b/libraries/pushproviders/firebase/src/main/res/values-it/translations.xml new file mode 100644 index 0000000000..1238fc47e3 --- /dev/null +++ b/libraries/pushproviders/firebase/src/main/res/values-it/translations.xml @@ -0,0 +1,11 @@ + + + "Assicurati che Firebase sia disponibile." + "Firebase non è disponibile." + "Firebase è disponibile." + "Controlla Firebase" + "Assicurati che il token di Firebase sia disponibile." + "Il token di Firebase non è noto." + "Token Firebase: %1$s." + "Verifica il token di Firebase" + diff --git a/libraries/pushproviders/unifiedpush/src/main/res/values-it/translations.xml b/libraries/pushproviders/unifiedpush/src/main/res/values-it/translations.xml new file mode 100644 index 0000000000..a2ec4fa24a --- /dev/null +++ b/libraries/pushproviders/unifiedpush/src/main/res/values-it/translations.xml @@ -0,0 +1,4 @@ + + + "Controlla UnifiedPush" + diff --git a/libraries/troubleshoot/impl/src/main/res/values-it/translations.xml b/libraries/troubleshoot/impl/src/main/res/values-it/translations.xml new file mode 100644 index 0000000000..15328545ec --- /dev/null +++ b/libraries/troubleshoot/impl/src/main/res/values-it/translations.xml @@ -0,0 +1,6 @@ + + + "Esegui i test" + "Esegui i test per individuare eventuali problemi nella tua configurazione che potrebbero far sì che le notifiche non si comportino come previsto." + "Risoluzione di problemi delle notifiche" + diff --git a/libraries/ui-strings/src/main/res/values-be/translations.xml b/libraries/ui-strings/src/main/res/values-be/translations.xml index d275443753..c155ad7ca3 100644 --- a/libraries/ui-strings/src/main/res/values-be/translations.xml +++ b/libraries/ui-strings/src/main/res/values-be/translations.xml @@ -161,12 +161,14 @@ "Сучасны" "Адключыць гук" "Вынікаў няма" + "Няма назвы пакоя" "Па-за сеткай" "або" "Пароль" "Людзі" "Пастаянная спасылка" "Дазвол" + "Калі ласка, пачакайце…" "Вы ўпэўнены, што хочаце скончыць гэтае апытанне?" "Апытанне: %1$s" "Усяго галасоў: %1$s" @@ -217,6 +219,7 @@ "Тэма" "Пра што гэты пакой?" "Немагчыма расшыфраваць" + "У вас няма доступу да гэтага паведамлення" "Не ўдалося адправіць запрашэнні аднаму або некалькім карыстальнікам." "Немагчыма адправіць запрашэнне(я)" "Разблакіраваць" @@ -241,6 +244,7 @@ "Не ўдалося загрузіць паведамленні" "%1$s не магчыма атрымаць доступ да вашага месцазнаходжання. Калі ласка паспрабуйце зноў пазней." "Не ўдалося загрузіць ваша галасавое паведамленне." + "Паведамленне не знойдзена" "У %1$s няма дазволу на доступ да вашага месцазнаходжання. Вы можаце даць доступ у Наладах." "У %1$s няма дазволу на доступ да вашага месцазнаходжання. Дазвольце доступ ніжэй." "%1$s не мае дазволу на доступ да вашага мікрафона. Дазвольце доступ да запісу галасавога паведамлення." diff --git a/libraries/ui-strings/src/main/res/values-cs/translations.xml b/libraries/ui-strings/src/main/res/values-cs/translations.xml index e6b648d731..1aa3dc6ec5 100644 --- a/libraries/ui-strings/src/main/res/values-cs/translations.xml +++ b/libraries/ui-strings/src/main/res/values-cs/translations.xml @@ -161,12 +161,14 @@ "Moderní" "Ztlumit" "Žádné výsledky" + "Žádný název místnosti" "Offline" "nebo" "Heslo" "Lidé" "Trvalý odkaz" "Oprávnění" + "Počkejte prosím…" "Opravdu chcete ukončit toto hlasování?" "Hlasování: %1$s" "Celkový počet hlasů: %1$s" @@ -217,6 +219,7 @@ "Téma" "O čem je tato místnost?" "Nelze dešifrovat" + "Nemáte přístup k této zprávě" "Pozvánky nebylo možné odeslat jednomu nebo více uživatelům." "Nelze odeslat pozvánky" "Odemknout" diff --git a/libraries/ui-strings/src/main/res/values-de/translations.xml b/libraries/ui-strings/src/main/res/values-de/translations.xml index 095374783e..eb8702cbc4 100644 --- a/libraries/ui-strings/src/main/res/values-de/translations.xml +++ b/libraries/ui-strings/src/main/res/values-de/translations.xml @@ -68,7 +68,7 @@ "Mehr erfahren" "Verlassen" "Unterhaltung verlassen" - "Raum verlassen" + "Verlassen" "Mehr laden …" "Konto verwalten" "Geräte verwalten" @@ -120,7 +120,7 @@ "Chat-Backup" "Copyright" "Raum wird erstellt…" - "Raum verlassen" + "Hat den Raum verlassen" "Dunkel" "Dekodierungsfehler" "Entwickleroptionen" @@ -158,12 +158,14 @@ "Modern" "Stummschalten" "Keine Ergebnisse" + "Kein Raum-Name" "Offline" "oder" "Passwort" "Personen" "Permalink" "Erlaubnis" + "Bitte warten …" "Bist du sicher, dass du diese Umfrage beenden möchtest?" "Umfrage: %1$s" "Stimmen insgesamt: %1$s" @@ -185,7 +187,7 @@ "Bericht eingereicht" "Rich-Text-Editor" "Raum" - "Raumname" + "Raum-Name" "z.B. dein Projektname" "Gespeicherte Änderungen" "Speichern" @@ -215,6 +217,7 @@ "Thema" "Worum geht es in diesem Raum?" "Entschlüsselung nicht möglich" + "Du hast kein Recht diese Nachricht zu lesen." "Einladungen konnten nicht an einen oder mehrere Benutzer gesendet werden." "Einladung(en) konnte(n) nicht gesendet werden" "Entsperren" diff --git a/libraries/ui-strings/src/main/res/values-fr/translations.xml b/libraries/ui-strings/src/main/res/values-fr/translations.xml index 6ee43d0b78..e3c91a8804 100644 --- a/libraries/ui-strings/src/main/res/values-fr/translations.xml +++ b/libraries/ui-strings/src/main/res/values-fr/translations.xml @@ -158,12 +158,14 @@ "Moderne" "Mettre en sourdine" "Aucun résultat" + "Salon sans nom" "Hors ligne" "ou" "Mot de passe" "Personnes" "Permalien" "Autorisation" + "Veuillez patienter…" "Êtes-vous sûr de vouloir mettre fin à ce sondage ?" "Sondage : %1$s" "Nombre total de votes : %1$s" @@ -213,6 +215,7 @@ "Sujet" "De quoi s’agit-il dans ce salon ?" "Échec de déchiffrement" + "Vous ne pouvez pas voir ce message" "Les invitations n’ont pas pu être envoyées à un ou plusieurs utilisateurs." "Impossible d’envoyer une ou plusieurs invitations" "Déverrouillage" diff --git a/libraries/ui-strings/src/main/res/values-hu/translations.xml b/libraries/ui-strings/src/main/res/values-hu/translations.xml index 5506714d7a..409a2645ec 100644 --- a/libraries/ui-strings/src/main/res/values-hu/translations.xml +++ b/libraries/ui-strings/src/main/res/values-hu/translations.xml @@ -158,12 +158,14 @@ "Modern" "Némítás" "Nincs találat" + "Nincs szobanév" "Kapcsolat nélkül" "vagy" "Jelszó" "Emberek" "Állandó hivatkozás" "Engedély" + "Kis türelmet…" "Biztos, hogy befejezi ezt a szavazást?" "Szavazás: %1$s" "Összes szavazat: %1$s" @@ -213,6 +215,7 @@ "Téma" "Miről szól ez a szoba?" "Nem lehet visszafejteni" + "Nincs hozzáférése ehhez az üzenethez" "Nem sikerült meghívót küldeni egy vagy több felhasználónak." "Nem sikerült elküldeni a meghívót (meghívókat)" "Feloldás" diff --git a/libraries/ui-strings/src/main/res/values-sk/translations.xml b/libraries/ui-strings/src/main/res/values-sk/translations.xml index 2b2b6cbf09..8a2fdd1c5b 100644 --- a/libraries/ui-strings/src/main/res/values-sk/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sk/translations.xml @@ -160,12 +160,14 @@ "Moderné" "Stlmiť" "Žiadne výsledky" + "Žiadny názov miestnosti" "Offline" "alebo" "Heslo" "Ľudia" "Trvalý odkaz" "Povolenie" + "Prosím, počkajte…" "Ste si istí, že chcete ukončiť túto anketu?" "Anketa: %1$s" "Celkový počet hlasov: %1$s" @@ -216,6 +218,7 @@ "Téma" "O čom je táto miestnosť?" "Nie je možné dešifrovať" + "Nemáte prístup k tejto správe" "Pozvánky nebolo možné odoslať jednému alebo viacerým používateľom." "Nie je možné odoslať pozvánku/ky" "Odomknúť" @@ -240,6 +243,7 @@ "Načítanie správ zlyhalo" "%1$s nemohol získať prístup k vašej polohe. Skúste to prosím neskôr." "Nepodarilo sa nahrať hlasovú správu." + "Správa sa nenašla" "%1$s nemá povolenie na prístup k vašej polohe. Prístup môžete zapnúť v Nastaveniach." "%1$s nemá povolenie na prístup k vašej polohe. Povoľte prístup nižšie." "%1$s nemá povolenie na prístup k vášmu mikrofónu. Povoľte prístup na nahrávanie hlasovej správy." diff --git a/libraries/ui-strings/src/main/res/values-sv/translations.xml b/libraries/ui-strings/src/main/res/values-sv/translations.xml index a7b1f295f3..78b87f5cbe 100644 --- a/libraries/ui-strings/src/main/res/values-sv/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sv/translations.xml @@ -1,10 +1,15 @@ "Radera" + + "%1$d siffra angiven" + "%1$d siffror angivna" + "Dölj lösenord" "Endast omnämningar" "Tystad" "Pausa" + "PIN-fält" "Spela upp" "Omröstning" "Avslutade omröstning" @@ -78,6 +83,7 @@ "Starta verifiering" "Tryck för att ladda kartan" "Ta ett foto" + "Försök igen" "Visa källkod" "Ja" "Om" @@ -183,6 +189,7 @@ "%1$s kunde inte ladda kartan. Vänligen försök igen senare." "Misslyckades att ladda meddelanden" "%1$s kunde inte komma åt din plats. Vänligen försök igen senare." + "Misslyckades med att ladda upp ditt röstmeddelande." "%1$s är inte behörig att komma åt din plats. Du kan aktivera åtkomst i Inställningar." "%1$s är inte behörig att komma åt din plats. Aktivera åtkomst nedan." "%1$s är inte behörig att komma åt din mikrofon. Aktivera åtkomst för att spela in ett röstmeddelande." diff --git a/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml b/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml index 6f8df97530..c15efbab40 100644 --- a/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml +++ b/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml @@ -40,6 +40,7 @@ "繼續" "複製" "複製連結" + "複製訊息連結" "建立" "建立聊天室" "拒絕" @@ -131,7 +132,7 @@ "我的最愛" "檔案" "檔案已儲存至 Downloads" - "訊息轉寄" + "轉寄訊息" "GIF" "圖片" "回覆 %1$s" diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 832a3df104..f25969332e 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -240,6 +240,7 @@ "Failed loading messages" "%1$s could not access your location. Please try again later." "Failed to upload your voice message." + "Message not found" "%1$s does not have permission to access your location. You can enable access in Settings." "%1$s does not have permission to access your location. Enable access below." "%1$s does not have permission to access your microphone. Enable access to record a voice message." diff --git a/screenshots/de/ui_T_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,de].png index 1bffde3e76..26aa4e24fe 100644 --- a/screenshots/de/ui_T_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ba03faf6bc569114f7a8a322054aedbb7fa5d1c598a468fb840f4bd6db9caa6 -size 46633 +oid sha256:6fa1cd16e9fbe6f7b83f9988b85267623f51ce6bac3b621a7003bfeb71be4d17 +size 46711 diff --git a/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,de].png index f284bc55f0..4dd574d947 100644 --- a/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:703e960b75c7c31f881b216331457e74b4eda1203f929ffde7bee9f46fb30fe7 -size 73048 +oid sha256:63a1d3f461d1b1e0368ba13ddb0bca94fcea0c06ef3e47888ea627d66cbb8fcb +size 73185 diff --git a/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,de].png index 50048a09d8..586499c195 100644 --- a/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1504987d30609e659c6cdc8b1808ef2b8038168def096450159c9036b5c52ca8 -size 91582 +oid sha256:f1f89b957b346c32398b5ee8162bf4197b03a2d9bc81628bf10397e145adf5c0 +size 91705 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png index 416d65a077..3181c1ed84 100644 --- a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44564281cb76d1c1b65e257697d3053b14e0c276a648f35e4e98d74d1cf8375d -size 144995 +oid sha256:36ae9ae88856441385fa8ff550e4f07a6a9e9b1feb31285b4f3671eb6ec18ea0 +size 143686 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png index 44c0c6c188..a31d29b2b6 100644 --- a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5e462dd1ce91031eec0c00047dd979c16da87383f185834c5625f6a471c8b34 -size 146409 +oid sha256:f31951220d86db47e538f69aee0bdcd5594e00553f5da9748ee2efac9fd67fa3 +size 134239 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png index 07bddaccc1..b234d4db10 100644 --- a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c2549782c79a31f526a285b72c7c5b20d9c85c44e0dac5f912383348312c21f -size 147694 +oid sha256:52329fbf19a4e9f186c25ff2785be94bb560deeea8793c234a1b43528b9fc814 +size 145944 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,de].png index d42bf9fc14..0960d07b7c 100644 --- a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0cec8d77a89dc89b140a4fd3014eb0d2b09f7eddeecc7aabd1e1ff92ad380d50 -size 145010 +oid sha256:d8e7aab2665c88e972edff1a8d9a1147d88807d52f0aadea6aa57903a51c123d +size 147720 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,de].png index ba484f5d01..617ac88378 100644 --- a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fe3070f7ba9eedb9113a1051bf72271dad85f61ff2239692beb7a11767eb6fa -size 153249 +oid sha256:896e15b991f9704a6629722f2246feeba612667e154cc741df9da072ae9af432 +size 144571 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,de].png index 10b22571b4..32abdf6eba 100644 --- a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9665850a9c0d650ea2dd1b804847a3b50446f58af2dc7e195f3395c8d69bb8c6 -size 127389 +oid sha256:805f5c6614e6c82bd05e8c827def9f73f05fe587a87d92cad5759eeb8979dd68 +size 153234 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,de].png index 31471f5230..4ef0a04620 100644 --- a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c00386260e28913c7a258ea0346988eca7136a3a7a9988ba7697001e045e7939 -size 131812 +oid sha256:14d99c2ab2d063ebb1d5e07570387b42b34872db28f699e987811f448884a3dc +size 127976 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..15405677b3 --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64f12e01b54456b652dc344b9c626c4eb893f419709afe6a3af2a8e27c2fc61c +size 132426 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..a41ae6fe2a --- /dev/null +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84e878667f2e372763508c9735c998a18f84702e2c8bedeab4a8e6e10e2cf56a +size 145771 diff --git a/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png index cfd63459ab..3a60640ffe 100644 --- a/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19fff555b9fa61a4966007f6764bfc1d56c8c72b1e735ff1c6e4bc800b920349 -size 26161 +oid sha256:71e3e3a6559eff5b319d690e0769cd08a496763e3952acdc542aa9fba12a94a7 +size 25149 diff --git a/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png index 89d5c5c20a..fb6dcc4392 100644 --- a/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54cb05d5bb2b35e9d59941c1a5caf3f8700297306ed15367642365eb36b04035 -size 39385 +oid sha256:779e08f28f221c9e87ab9440c32adf783a1686b2e1776cef960f89449bf9bf55 +size 38255 diff --git a/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png index d517922e63..6327752506 100644 --- a/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07c5e15af80d641131eb9b0e22fc7649b595989e5e8d176ae46f6c17c73d418b -size 41480 +oid sha256:2768dd0ed0217843e5ec5a28cd2b71ecf9e5694610ddfad3bcf0387b316b1a75 +size 40321 diff --git a/screenshots/de/ui_T_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,de].png index d301549e63..02e9e2c4e8 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9576f73065257426d939cfff6a408cdd726852c93b924003315529fbe2d39697 -size 49068 +oid sha256:50e684dd614ddfd25900cdcc1d7752cba3f4488bf930d4896d45c239a179775a +size 51207 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,de].png deleted file mode 100644 index 2349388fce..0000000000 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:483a7fbb9d53f7fe0102f690dc75693a311dc733b25865285a8ef222e23a52bf -size 16219 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..9eaa3fc25b --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db8231c543c7c085547903b8696f4a651403d3fe07c390e3cdf6f0e11fb5a3a9 +size 14183 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,de].png deleted file mode 100644 index bda55d2f51..0000000000 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32de970407782a74f94916cf9e730a988c1db91ea111a18d2847caee9b140179 -size 37270 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index 06850a5132..0000000000 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c0ab0e5df0f69b20d9f446696fd1a84edafc69c3edd5cce345fa13f8562e9a97 -size 39225 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..53eadb5722 --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41ed54b7173ff2b1462f328ae44c4c739513504f8bef5095adeb3cae8b00de4d +size 36626 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..067978197b --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48c6043adc120d16fd8f8ccfdbd89fd8362fdb52a2bdddb366ff876f18e84361 +size 38570 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,de].png index 52fbb60e11..ff6f96cedc 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d85274c9ce8136a3fe7ff512fefb174011abf07abf26d1dbaab4d7851aaf1e6 -size 59726 +oid sha256:e4c4a24df82af80b13f09a8ac1fdf3ace0d31ba3185a682e5610c7af0992c0a7 +size 57579 diff --git a/screenshots/de/ui_T_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..cc14b0baf9 --- /dev/null +++ b/screenshots/de/ui_T_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb63d72927cdaf8dc221f1d16778065b944ef52a2a3ccb489b218eb841678e13 +size 9174 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,de].png index 76b8830f01..83a571f610 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f5309f0aa42c1fee982ecbf15c6b42b99b8961ce280f1876ef95049560ba2f6 -size 44240 +oid sha256:6efcdbbaebbfdaac1b9d451c2882cbac12dc871b388453bc323328860323e155 +size 43894 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,de].png index 4ed8a9a491..c3a963c7a9 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12b6bc3efd6bc4573d2374b3f5bd79a2794d71193b298f76a5e46394e09e0f0f -size 43137 +oid sha256:0a488aa7ab179160fa0e3b9d98b22c0a5d314b5c0c43bc5b52f8693aa5947bcd +size 53112 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,de].png index 6b84483bb4..d72abfb4e7 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d0c9c4ca334141141d9864d88176aca7884acc58d4860d56d42e2d11c36562a -size 44391 +oid sha256:8d259bc851bb9e1cb5a0c478082af87873a290523333935d1a3c7f1176c803b2 +size 54394 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,de].png index f61a184a4a..7fbe676e68 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b46a42f4d2c65779ebd553d3193fc73fde3a9194c3143c5e94051e9e9fc5ae1 -size 37927 +oid sha256:24aa89db74c6593c86d79890a9cc82ac05345f08046229ffbb609a0eaa784099 +size 47078 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,de].png index 92640e6e92..741086fb27 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e21303bfe20cc465e5e87ba4057b22f88a47b09cd54d9c92e85a475b56c90e4b -size 41387 +oid sha256:72710318d49e86834e13061f5d52a375bf195eab4ab5d16037b35de379d471e3 +size 41597 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,de].png index b2e724abe5..b897b7d7bb 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1690c9031dcdf38f5a878d326136bf34e4bc80dc24e906ac0b7e60683ee72845 -size 61545 +oid sha256:ea367cfc65fdcb6bba98670276ef8419706768736587bd45814f41fd6b5a4e55 +size 71685 diff --git a/screenshots/de/ui_T_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,de].png index a8c9788e44..110e7c9c8e 100644 --- a/screenshots/de/ui_T_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c72c178f1678914e3e74991decf16c41ef68bcdc641b7ef1bf2889d2ced0f80b -size 130124 +oid sha256:772612901dbdb4d62b7253447b99c11a5573a791f60546a01316f6b548ff3c1e +size 133350 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,de].png index 6be3c1195a..2d46bb705e 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9162e5a30a917ff54e92419134dce2b60d3e7f87f962a6a5fa2e4e7a8a7753be -size 32360 +oid sha256:2bb90faf2dee52b881a6d64a90cf7134b0d53a3848f8ae94e786f76adff5ddda +size 32479 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,de].png index 35cc7e98d3..901afeaed5 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81b9e5b8eee8dba6b4fb166c269509c77f19ab1be48ebe5a7d98982c81998605 -size 26495 +oid sha256:1adf20d2ea867e69d3f5c0b113f7626f6c8a81c8a32f6d38a5a10029f4041085 +size 26615 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,de].png index 7676db9404..912e9ec888 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa1b174d118d79076198174aa92bf4255f66c5de04638cf54f3b3e572cd253a5 -size 57738 +oid sha256:1a04103f9729f28ce395f61688caa70f30e6d7e5fa3ab0354685d9168e8370fa +size 57853 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,de].png index 9567900a73..f585bc3dda 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0705569901f8749d7cc59050361b1f8304a9f9007e0deccfd1cdddc8b36181cc -size 32181 +oid sha256:bf4efd564bfaa181e08847e923f8643bbca6d1b370800090379d863b5db37d87 +size 32301 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,de].png index ed16ba5dc0..41065b7d10 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce62ee39c676a2856c3c30d84b969ea69ee6e00b474e721dacadb9ba0e0bf387 -size 32163 +oid sha256:9839d3f488deb046c13d245af06943c0259904efd0c9d00e4469d3bdc4812aaf +size 32283 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,de].png index 02ffa0dd9d..e48068ad06 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2dd3eda8c85591d3cd30359349a98463e4b6ea641e5719ff487bf516d26b4aa7 -size 29732 +oid sha256:24b15c344d0f3b6260b4fe7c549606fc61b0efd7e982d479b2a33de459d1aa5a +size 29855 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png index 069a509b1e..432a676ff0 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3fa187019fe6974b8dc63327eece5fe2fe6bad9d3f90d6d77a5c48a5d88e0a1b -size 27966 +oid sha256:971a2a581c6ab1f95fc656ddb7bafda1f1abb828b5882d256c9558f8df3cb192 +size 27233 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png index ff10d461b3..f3b3802764 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a19a33aad30cb43f9cf78eaebee585ecb0cba3d252a02c577c98ae6c1c0c273 -size 39391 +oid sha256:2ec77679727fdabe7a3d7890df9aee5be07e34de0b0607d945dd0af19f8d5bab +size 39008 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,de].png index e9304a0c6d..01b60f2643 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41a58b2117148c08802623a3349e2d90a75de1729f24188fe5ce3fbe4e8b28ff -size 49356 +oid sha256:19f67324516d939da2978432547a47aad6a5774a2e46911a1cab6431b61317b2 +size 48774 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,de].png index f91a8d5b0f..6089d07340 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dbe7a2f33256517f91f6987c7337f4bc76fa411fbdec79b538ab16541383bf44 -size 49244 +oid sha256:822f5216161fb652f6a02bef5d7285b59759d089ea6208b63e24285e07c42aa2 +size 48679 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,de].png index fff7896550..de56e2959a 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:420ec56dfbe5948890ee7467b5803bf9ed10cb141143880e7ff1ee7f4f7d3db6 -size 46409 +oid sha256:70d4171f9c67f4753cd833fa99a0cf9142c929ef3bd55fdb31a715e16efec616 +size 46757 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,de].png index 282bd17123..a44162759c 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1431c75b6105069c619b11f4f50206c0ff48732c5007234953654bbdd5ef147e -size 46847 +oid sha256:7263fb5cad4d16c45783e0c07c399277f9f318e7bd11826fddd938afdadf82a2 +size 47244 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,de].png index fe1351eba4..792bf175ea 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e86f66ffe933c56af20be8301c880950536f420fd99d6e89ffae6162352a86d -size 56256 +oid sha256:5036efb20f9392e96e1454457054bd72d51d290bb2d652d0c88a658cc71f2be1 +size 56577 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png index 0883faece8..cb81846dc3 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93ae88e99b1d8dc1779c443718f2fa5795e3dce696bf01278f79c984d90a3503 -size 53214 +oid sha256:48ef1fbf0480f7e2b2765a83d832700c10760608047fe3c2e5f6f5bee2fa9d63 +size 53245 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png index aac0da2cd1..ccae5ae684 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9aa91ff04437f876a2d4666dfb6eeaa3433b9ac065bd740cd992e1031947b401 -size 52875 +oid sha256:beafe4f52ff8bacededa41cf434140a1e0fef042c0e392a6c5457d80cbc88d91 +size 52904 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png index 34e3b2dc4c..c2218ded54 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a39a5d63fe1165c8c97b2b85538a1bb8336a545c0f9e1ae0141d669a0e7c7a70 -size 49947 +oid sha256:4bf1f4a84444b7b15fef38205091dfe9af501859534d007dee7c99503f9e3884 +size 49942 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png index 34e3b2dc4c..c2218ded54 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a39a5d63fe1165c8c97b2b85538a1bb8336a545c0f9e1ae0141d669a0e7c7a70 -size 49947 +oid sha256:4bf1f4a84444b7b15fef38205091dfe9af501859534d007dee7c99503f9e3884 +size 49942 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,de].png index 393fe14b30..c5c43aa906 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f840718da5a88f072c5b16c916a28d281a6c3f447eb52cc67d5bfa1e216d7c7 -size 51234 +oid sha256:44e918047c23d4d222d593f0366458a9c8bedb193ab5243681522c8f01e9c463 +size 50997 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,de].png index 9ed48dc7cd..c9ddecf9bb 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e206f8a58c73927c230eefa1380211f62bc7c261cc8e60f41c71505f4437639 -size 38134 +oid sha256:00c07c7e41360abc1f8dad23d13931eba2ecf60254241cf308b135de2ab54add +size 37640 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,de].png index 9fd32b48b0..9ca8b51b47 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a7900afb8bbd813133f1adb8bd39e37513e1d3a0297057ad80d6f8d9bcbc6bd -size 41188 +oid sha256:6bc6bd14a4eab8b7b81146f2f5520103a6ee8de9daba9e1009e91db2a073f355 +size 40660 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,de].png index 07a809819f..4df2219b68 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4693e6dbb564b485dde0cded1bbd1cf143d12e8f9c12058aa32c6b270616d7b9 -size 37752 +oid sha256:6fa63dcbdaff924ac64c6c1928a7bbb86e91aab1a35f5a4a1243a251936b0b41 +size 37251 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,de].png index 4c5a04122e..15da961e9a 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c0f5d1f302f3fbdca5d7fc0df4ae8b216b4ecbc33c99613e5e54ffddfe885dc -size 47413 +oid sha256:0d140ef66dd402e77cdddb6dd2ff95c1b949217712465e18c40a1e0cc507a079 +size 46919 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,de].png index b04e6fcf71..c4a69849fb 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6bcfed2baaee56be343191a99021b3f40d1afe3dd64541483754978a2cb0efc6 -size 50810 +oid sha256:7bcbfc3b10210bf50d3301eb1794c131372a76fbeed909278d53e12755b96323 +size 50572 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,de].png index 884b0f7037..6984b00c0d 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d538f24f1d9f3c39c52131db17afc7d3aae0f571d4f64a55e80a781879e5b2f -size 49499 +oid sha256:1b80a2234144d2d19362177dffc038d0e64f5a543ebc16958cd25f31e8095f40 +size 49004 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,de].png index cce9ec534c..96468ad328 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd613303936484d6286820ab6cc9acb6bf59753618cad67a572f343611999cc6 -size 48619 +oid sha256:04a335c7fa31f7ec14a74d5ff803147fccd49af04ea838d81175d7d396a4607a +size 48067 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,de].png index 4da9fa7bdc..e38e5371fc 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31ccf70e57816664cd0b67062dd0657d1fa4ca7189507f50718cb79a2ea6076f -size 53083 +oid sha256:a28f5b85688736639c13559ed7e473de84f579709779d60b39ff7dcab9d38199 +size 52807 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,de].png index 3f74139ab4..9fe3389591 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87a1a5ce4b2ac4b61ee0d25b9e13bbb6a4d0899fb4b8c136f3558e38f9de6bc9 -size 39943 +oid sha256:80f52afd93e5032d6bce8f663f0964669ac55597a9c59de4f4784939527a96f2 +size 39398 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,de].png index fd91f314fd..a3af7cbe90 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6c1e320485d197175c89456ba6898ce4040f4f74ae6b6c8e7546cc596b659f3 -size 43248 +oid sha256:6152f4e2c02c7c121ce84d27dcba01dedfe544500d4a5975c237540da94ff4ef +size 42677 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,de].png index eae36448f4..8639a4a1ad 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:479d73d7096a6fc96774ad0bd078dd821b66ed7ad1bf637f827046e888efcb85 -size 38905 +oid sha256:d51ab086c562326de82edb58e4f7c33fee1ab0e3eb73f44aabaab783cf95cb8f +size 38372 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,de].png index eef79fbc02..50827c99ce 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:345578c4bb11a8b51a3c575acddf59552534540a9f3d47c37aa3a6fb141044b1 -size 49215 +oid sha256:020766a74ac77c88b6becf982ebf5855a0fed012818f536505bf22c955210253 +size 48645 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,de].png index ea717b967f..49e6a10c6e 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09256f9a6e9112c423a630814f0979f538e6f97a941a6b169bdb5223624bfd42 -size 52645 +oid sha256:483e119fa4eb4dd1b56dec01409756aa419a6cc450624ca44287e74c19d94009 +size 52367 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,de].png index bdd78837f1..135a48b6fb 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d56f512e0e24e67b428612fea9e0fa8f72eab1e692930589a6891557162de898 -size 51357 +oid sha256:186e1d4c6eff0862cbacac6d5e6b013512e6bebdca0301c9fa62635904f192f7 +size 50785 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,de].png index eadaa8c3c4..bd944a3811 100644 --- a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55f0477ff8e43462426cad450752e4c95fc57e1e808dd0fc923751e485a2c179 -size 50277 +oid sha256:3d0eb2a86db686009297251a6365f0e3e56eddb92f42e3480b1df2e065aa80a2 +size 49672 diff --git a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,de].png index 3ee3be0d41..e7ca7482a9 100644 --- a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b6f0ea121612aa4023e9a0c6e14fe19615f07c93d94cfe1539d1d967dd81f72 -size 15061 +oid sha256:80822fbcd6f4c90a07eb4f35dead0c2729120c894260e113bb7a4e0eadd7e2ac +size 15178 diff --git a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,de].png index c7c601331a..e610fd8517 100644 --- a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:931dec4c0491a88b28186878bda2093d1d51be8d19147308ba6a54dbf6445339 -size 31059 +oid sha256:70d52b2836caa2ee78dedbace5cd8712569b72bf2ab62995037443570ed60120 +size 31176 diff --git a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,de].png index f49c79ff2d..bfc8b1e7a7 100644 --- a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:584e37736a964a4a1b009859e0a660d0615e13241a470fee8406a53b93c9f01c -size 32912 +oid sha256:0b473dbb8e5f522dc3f0f0f55c3ffec3e63eb01b6b8dc4a4d0583e0bd490ec16 +size 33030 diff --git a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,de].png index 99ca038987..6e6eb19f30 100644 --- a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f40d8cb6f0b73e30ecef7c354db23a3c9b4054e7e8cdd51e2a4287401a255f76 -size 31968 +oid sha256:12e92afc4d44e01074aed18e3cd3954fd6a2624f68459def1a9aa19f776d08bc +size 32072 diff --git a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,de].png index 8f4560115b..afdf7584a2 100644 --- a/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ed001056babb81e004f455b45645c8b4a88c094d4cf2c189304ae42c5beffdf -size 36169 +oid sha256:152c87a2d68c2da7f7dad0fa09ac72ec81a001d17ba292cf25ac63f7ca922b59 +size 36286 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..df3e81cb70 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e210ba4dcf69943334574d2db5cfe02c61c359a65f54ec69859acbd533f918d6 +size 14989 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..4cb38e4b38 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3035259f77d3d5167c0048c9a8ad8fc31e5f63bfcc9eaa3e9ab6194d3860d7da +size 25620 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,de].png deleted file mode 100644 index 1ee949b266..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b000627f55a67335db8b66476150b5420928205e3fb4071525ea9e0ef5f35a87 -size 22306 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..8d21438efd --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:681751bb61c5514a427e2d7815cc9e2ef9307335b61fddb9b9f7aaa6ab79e04a +size 21612 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..38c6d5e100 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da9cdff275e86d57e4bce13da259113e2bcfe7612f9bd94251f0db9178bd5e47 +size 24022 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..db358d0f51 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:830c20a4c054afae6670a9fba5e932bd2b3964d7b5400e219ce20034ffdb521c +size 92638 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..f51275344f --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cc8477abce180b7c8990b0bb19b806f64550f81ed7f15eef4a345923b42297b +size 92441 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..7a21a69da5 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:569d900fbd054603d44637839fe55f2f7379a3fb572f5dd9312aa7e4addbafd7 +size 26254 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..0594314142 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dded948ce3d18d8a8c053956ad782bd3d34440fa687a888d8da0f0c07f7c11f3 +size 25355 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..1149fb096b --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71fbea94b179d252cf671c762331b0c8e69177e9d883c727366ae1f6d3bb5dc4 +size 23278 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..44e615bd47 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81ffa76c7e84e99bead9c56c400db78ca152a1c3a2f1ffef5fa1affc2d66d149 +size 115291 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index b3a2f9cc26..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:de19abe1cc0555fd55675c2b941739e211cd593a4eb87a3fad5a57e5800c1e7c -size 82792 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index b3a2f9cc26..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:de19abe1cc0555fd55675c2b941739e211cd593a4eb87a3fad5a57e5800c1e7c -size 82792 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,de].png deleted file mode 100644 index f766cae9c3..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4880ef985bd1a4b710da1235aef18340040088d2a26a6416a2f5e69678a28b0 -size 83222 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index 2386ba7251..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:66d8e4bceb5a15b4a5effbb13a9e1559475a89caf5473fd0e1b3cb37eb863b34 -size 26132 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index 32bd9f4ae4..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f554f41cdb63f16c81d54b66eac176b86cb8734318d6094981fce699602905e -size 24066 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,de].png deleted file mode 100644 index 1fd584c0a4..0000000000 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4bd7911fcd7acf60c0fbd6587a920791307197f1fe706218172acd75ccf7f44c -size 110468 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png index a3c2ca65ce..58e0f04b70 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91b9724a3d460dbcdd5ea25bcb9aac9ceba18d58621e743e80c7f0583902241e -size 53114 +oid sha256:462fbb453fb06effbf1c1356d757ebf4def9c722d099e8b1a2ebcdf1a9a239df +size 50203 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png index ae4a903e64..bfdce8cf42 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b2a29995bd4562466e7bb54c7f721c3b41d26b583adca0d32da08c9b57e9ca5e -size 64687 +oid sha256:7f22202ed861efcc57943290f264018b3e54b0c60cdd63f11ab27b93eb9faa6e +size 61624 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png index 8d21bf7ae3..ab33ab81f0 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1d20b4e4ab821ad1adee9af1d39b11e52a9a81848cb77ebfbf790bbc7af3722 -size 62961 +oid sha256:5d6eb1175fbd118ee6e454789b44a4c85c1b66d1e582a2d93d2de82f9d24b7a1 +size 59477 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png index 8197dd01e2..23095a682b 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f31fa189d99a64b155450927f9d9d5f34bfadb88afcbc1f76faf99a19d6afa19 -size 51530 +oid sha256:f47f4b98a7f9b1e62628fac73db76875d4b3f35125082e0a9fb374946359f13b +size 48032 diff --git a/screenshots/de/ui_T_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,de].png index 45a35c2ffb..d3fe2d3009 100644 --- a/screenshots/de/ui_T_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f3073ff908df905b614326cee277c7c507385a5dc8953d1e4d77b5f134d3941 -size 35914 +oid sha256:07330279f9875170d0b6969e21393e140219ff90eb030cf2cc28eea3c50319b6 +size 30432 diff --git a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,de].png index 735ab7f055..8f8385973c 100644 --- a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ddd1445d3d413ae95cdd1dce6c75aefb48f05ebf81ace825924913154c70c7c -size 27484 +oid sha256:52d0b7cef2aaed644a079a16d16b64bcfdde03921085693fe65b346de9c91d43 +size 34292 diff --git a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,de].png index 85d2fb5ea6..2cadc1ac83 100644 --- a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b268b1ebe73f2bba144f6c66032e0cf0de7d3e95ff5e669be29116c7c2bd3bd -size 25647 +oid sha256:cd23760ea490c2baead0537b868635cc7ca6b4fe980549823e4bd998dc3d4c9e +size 32391 diff --git a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,de].png index 9451a41915..871c7854ef 100644 --- a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0b9e03e91421ca1be95936518c9b3fd269c04429fd4517afb09799b4946abd3 -size 30298 +oid sha256:b7e18545ffdcb7fbccd6e4c3075cd25d4e3bf598d8fb1a7db24949eb378e0d15 +size 36732 diff --git a/screenshots/de/ui_T_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,de].png index 7a0af524ae..5ad482f640 100644 --- a/screenshots/de/ui_T_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c966061b836615c6f361e0f589929bb1e619ec48079bdd33ecea5f4bb091f91 -size 88273 +oid sha256:68aa88e289fb4792f5181fe4b75c8beb025257f8ae171c995bc8023a2ffd677c +size 91385 diff --git a/screenshots/html/data.js b/screenshots/html/data.js index 0c163d5a19..2fcdc832ea 100644 --- a/screenshots/html/data.js +++ b/screenshots/html/data.js @@ -1,40 +1,40 @@ // Generated file, do not edit export const screenshots = [ ["en","en-dark","de",], -["ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Night-0_2_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Night-0_2_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_0,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_1,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_1,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_1,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_2,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_3,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_4,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Night_1_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Night_1_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.async_AsyncLoading_null_AsyncLoading-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncLoading_null_AsyncLoading-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Day-4_4_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Night-4_5_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Day-4_4_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Night-4_5_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_2,NEXUS_5,1.0,en]",0,], @@ -44,11 +44,11 @@ export const screenshots = [ ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_6,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_7,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_0,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_1,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_2,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_3,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Night-1_3_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_0,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_1,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_2,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_3,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Night-1_3_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_10,NEXUS_5,1.0,en]","",0,], @@ -115,12 +115,12 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.button_BackButton_null_Buttons_BackButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BigCheckmark_null_BigCheckmark-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_BigCheckmark_null_BigCheckmark-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_BigIcon_null_BigIcon-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_BigIcon_null_BigIcon-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_5,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_5,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_5,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_5,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_2,NEXUS_5,1.0,en]","",0,], @@ -131,36 +131,36 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_7,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_Bloom_null_Bloom_Bloom_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_BottomSheetDragHandle_null_BottomSheetDragHandle-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.theme.components_BottomSheetDragHandle_null_BottomSheetDragHandle-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.atomic.molecules_ButtonColumnMolecule_null_ButtonColumnMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_ButtonColumnMolecule_null_ButtonColumnMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.molecules_ButtonRowMolecule_null_ButtonRowMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_ButtonRowMolecule_null_ButtonRowMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.call.ui_CallScreenView_null_CallScreenView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.call.ui_CallScreenView_null_CallScreenView-Night-0_2_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_6,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.login.impl.changeserver_ChangeServerView_null_ChangeServerView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.changeserver_ChangeServerView_null_ChangeServerView-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_CheckableResolvedUserRow_null_CheckableResolvedUserRow_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.matrix.ui.components_CheckableUnresolvedUserRow_null_CheckableUnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.matrix.ui.components_CheckableUnresolvedUserRow_null_CheckableUnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19839,], ["ui_S_t[l.designsystem.theme.components_Checkboxes_null_Toggles_Checkboxes_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_CircularProgressIndicator_null_ProgressIndicators_CircularProgressIndicator_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_ClickableLinkText_null_Text_ClickableLinkText_0_null,NEXUS_5,1.0,en]","",0,], @@ -178,42 +178,42 @@ export const screenshots = [ ["ui_S_t[Typo_Compound_M3 Title Large,NEXUS_5,1.0,en]","",0,], ["ui_S_t[Typo_Compound_M3 Title Medium,NEXUS_5,1.0,en]","",0,], ["ui_S_t[Typo_Compound_M3 Title Small,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.preferences.impl.developer.tracing_ConfigureTracingView_null_ConfigureTracingView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer.tracing_ConfigureTracingView_null_ConfigureTracingView-Night-5_7_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Night-5_7_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-3_5_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Night-5_7_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-2_4_null,NEXUS_5,1.0,en]",19842,], ["ui_S_t[l.designsystem.components.dialogs_ConfirmationDialogContent_null_Dialogs_ConfirmationDialogContent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.networkmonitor.api.ui_ConnectivityIndicatorView_null_ConnectivityIndicatorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.networkmonitor.api.ui_ConnectivityIndicatorView_null_ConnectivityIndicatorView-Night-0_2_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Night-0_2_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Night-0_2_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.designsystem.theme.components.previews_DatePickerDark_null_DateTimepickers_DatePickerDark_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[l.designsystem.theme.components.previews_DatePickerLight_null_DateTimepickers_DatePickerLight_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Night-0_2_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Night-0_2_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.designsystem.theme.components.previews_DatePickerDark_null_DateTimepickers_DatePickerDark_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.designsystem.theme.components.previews_DatePickerLight_null_DateTimepickers_DatePickerLight_0_null,NEXUS_5,1.0,en]","",19839,], ["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Night-7_9_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-6_8_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-5_7_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Night_1_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Night-7_9_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-5_7_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-4_6_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Night_1_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.theme.components_DialogWithDestructiveButton_null_Dialogs_Dialogwithdestructivebutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DialogWithOnlyMessageAndOkButton_null_Dialogs_Dialogwithonlymessageandokbutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DialogWithThirdButton_null_Dialogs_Dialogwiththirdbutton_0_null,NEXUS_5,1.0,en]","",0,], @@ -224,22 +224,22 @@ export const screenshots = [ ["ui_S_t[l.designsystem.text_DpScale_1_0f__null_DpScale_1_0f__0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.text_DpScale_1_5f__null_DpScale_1_5f__0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DropdownMenuItem_null_Menus_DropdownMenuItem_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Night-10_12_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Night-10_12_null_0,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLarge_null_ElementLogoAtomLarge-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLarge_null_ElementLogoAtomLarge-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMediumNoBlurShadow_null_ElementLogoAtomMediumNoBlurShadow-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMediumNoBlurShadow_null_ElementLogoAtomMediumNoBlurShadow-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMedium_null_ElementLogoAtomMedium-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMedium_null_ElementLogoAtomMedium-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-31_31_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-31_32_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-32_32_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-32_33_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-57_57_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-57_58_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-62_62_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-62_63_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_FilledButtonLarge_null_Buttons_FilledButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_FilledButtonMedium_null_Buttons_FilledButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_FilledButtonSmall_null_Buttons_FilledButtonSmall_0_null,NEXUS_5,1.0,en]","",0,], @@ -249,10 +249,10 @@ export const screenshots = [ ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_3,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.button_GradientFloatingActionButton_null_GradientFloatingActionButton-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_GradientFloatingActionButton_null_GradientFloatingActionButton-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-52_52_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-52_53_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_HeaderFooterPage_null_HeaderFooterPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_HeaderFooterPage_null_HeaderFooterPage-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_HorizontalDivider_null_Dividers_HorizontalDivider_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.ruler_HorizontalRuler_null_HorizontalRuler-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_HorizontalRuler_null_HorizontalRuler-Night_1_null,NEXUS_5,1.0,en]",0,], @@ -270,25 +270,27 @@ export const screenshots = [ ["ui_S_t[l.designsystem.icons_IconsOther_null_IconsOther-Day_0_null_0,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.icons_IconsOther_null_IconsOther-Night_1_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.molecules_InfoListItemMolecule_null_InfoListItemMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_InfoListItemMolecule_null_InfoListItemMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.organisms_InfoListOrganism_null_InfoListOrganism-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.organisms_InfoListOrganism_null_InfoListOrganism-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_8,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_9,NEXUS_5,1.0,en]",19842,], ["ui_S_t[l.designsystem.components_LabelledCheckbox_null_Toggles_LabelledCheckbox_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_LabelledOutlinedTextField_null_LabelledOutlinedTextField-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_LabelledOutlinedTextField_null_LabelledOutlinedTextField-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_LabelledTextField_null_LabelledTextField-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_LabelledTextField_null_LabelledTextField-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_LinearProgressIndicator_null_ProgressIndicators_LinearProgressIndicator_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_Dialogs_ListDialogContent_0_null,NEXUS_5,1.0,en]","",0,], @@ -339,25 +341,25 @@ export const screenshots = [ ["ui_S_t[l.designsystem.theme.components_ListSupportingTextSmallPadding_null_Listsections_Listsupportingtext-smallpadding_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.components_LiveWaveformView_null_LiveWaveformView-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_LiveWaveformView_null_LiveWaveformView-Night-11_13_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], ["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_9,NEXUS_5,1.0,en]",19832,], +["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_8,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_9,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.button_MainActionButton_null_Buttons_MainActionButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en]",0,], @@ -367,7 +369,7 @@ export const screenshots = [ ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_10,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_2,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_2,NEXUS_5,1.0,en]","",19839,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_3,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_4,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_5,NEXUS_5,1.0,en]","",0,], @@ -377,50 +379,52 @@ export const screenshots = [ ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_9,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_MediumTopAppBar_null_AppBars_MediumTopAppBar_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.mentions_MentionSpan_null_MentionSpan-Day-18_19_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.mentions_MentionSpan_null_MentionSpan-Night-18_20_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.theme.components.previews_Menu_null_Menus_Menu_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[f.messages.impl.messagecomposer_MessageComposerViewVoice_null_MessageComposerViewVoice-Day-6_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerViewVoice_null_MessageComposerViewVoice-Night-6_7_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Day-5_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Night-5_6_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_11,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_12,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_13,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_14,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_15,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_15,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-9_9_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-9_10_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-10_10_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-10_11_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-12_12_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-12_13_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-13_13_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-13_14_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-11_11_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-11_12_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-63_63_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-63_64_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Day-5_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Night-5_6_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_11,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_12,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_13,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_14,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_15,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_15,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Day-11_11_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageStateEventContainer_null_MessageStateEventContainer-Night-11_12_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Day-13_13_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonAdd_null_MessagesReactionButtonAdd-Night-13_14_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Day-14_14_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButtonExtra_null_MessagesReactionButtonExtra-Night-14_15_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-10_12_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-9_11_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19842,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetDark_null_BottomSheets_ModalBottomSheetDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetLayoutDark_null_BottomSheets_ModalBottomSheetLayoutDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetLayoutLight_null_BottomSheets_ModalBottomSheetLayoutLight_0_null,NEXUS_5,1.0,en]","",0,], @@ -430,21 +434,21 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItemSelectedTrailingContent_null_Listitems_MultipleselectionListitem-selectionintrailingcontent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItemSelected_null_Listitems_MultipleselectionListitem-selectioninsupportingtext_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItem_null_Listitems_MultipleselectionListitem-noselection_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Night-3_5_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Night-3_5_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_OnBoardingPage_null_OnBoardingPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_OnBoardingPage_null_OnBoardingPage-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedButtonLarge_null_Buttons_OutlinedButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedButtonMedium_null_Buttons_OutlinedButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedButtonSmall_null_Buttons_OutlinedButtonSmall_0_null,NEXUS_5,1.0,en]","",0,], @@ -456,47 +460,47 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_12_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_12_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.lockscreen.impl.components_PinEntryTextField_null_PinEntryTextField-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.components_PinEntryTextField_null_PinEntryTextField-Night-0_2_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_PinIcon_null_PinIcon-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PinIcon_null_PinIcon-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.lockscreen.impl.unlock.keypad_PinKeypad_null_PinKeypad-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock.keypad_PinKeypad_null_PinKeypad-Night-6_8_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.atomic.atoms_PlaceholderAtom_null_PlaceholderAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_PlaceholderAtom_null_PlaceholderAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_4,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.preferences_PreferenceCategory_null_Preferences_PreferenceCategory_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceCheckbox_null_Preferences_PreferenceCheckbox_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceDivider_null_Preferences_PreferenceDivider_0_null,NEXUS_5,1.0,en]","",0,], @@ -512,284 +516,297 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.preferences_PreferenceTextLight_null_Preferences_PreferenceTextLight_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceTextWithEndBadgeDark_null_Preferences_PreferenceTextWithEndBadgeDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceTextWithEndBadgeLight_null_Preferences_PreferenceTextWithEndBadgeLight_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-51_51_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-51_52_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.theme.components_RadioButton_null_Toggles_RadioButton_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Night-1_3_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Night-1_3_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-55_55_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-55_56_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_10,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_11,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_9,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_10,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_11,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_8,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_9,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.atomic.atoms_RedIndicatorAtom_null_RedIndicatorAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_RedIndicatorAtom_null_RedIndicatorAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-14_14_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-14_15_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-56_56_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-56_57_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-15_15_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-15_16_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-9_11_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContentForDm_null_RoomListModalBottomSheetContentForDm-Night-1_3_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-11_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-11_13_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_6,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_8,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_3,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_4,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_3,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_4,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_5,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_7,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_9,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_8,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_8,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Night-1_3_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-7_9_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_11,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_11,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_12,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_12,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_13,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_13,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_14,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_14,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_15,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_15,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_16,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_16,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_17,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_17,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_18,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_18,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_19,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_19,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_20,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_20,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_21,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_21,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_22,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_22,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_23,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_23,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_24,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_24,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_25,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_25,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_26,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_26,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_27,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_27,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_29,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_29,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en]",19835,], -["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en]",19835,], +["ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Night-1_3_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-6_8_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_11,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_12,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_12,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_13,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_13,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_14,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_14,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_15,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_15,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_16,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_16,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_17,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_17,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_18,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_18,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_19,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_19,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_20,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_20,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_21,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_21,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_22,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_22,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_23,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_23,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_24,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_24,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_25,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_25,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_26,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_26,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_27,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_27,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_28,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_28,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_29,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_30,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_31,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.atomic.atoms_RoundedIconAtom_null_RoundedIconAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_RoundedIconAtom_null_RoundedIconAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Night-1_3_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Night-1_3_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_1,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveNoneQuery_null_Searchviews_SearchBarActiveNoneQuery_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithContent_null_Searchviews_SearchBarActiveWithContent_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithNoResults_null_Searchviews_SearchBarActiveWithNoResults_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithNoResults_null_Searchviews_SearchBarActiveWithNoResults_0_null,NEXUS_5,1.0,en]","",19839,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithQueryNoBackButton_null_Searchviews_SearchBarActiveWithQueryNoBackButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithQuery_null_Searchviews_SearchBarActiveWithQuery_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarInactive_null_Searchviews_SearchBarInactive_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.createroom.impl.components_SearchMultipleUsersResultItem_null_SearchMultipleUsersResultItem_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.createroom.impl.components_SearchSingleUserResultItem_null_SearchSingleUserResultItem_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.createroom.impl.components_SearchMultipleUsersResultItem_null_SearchMultipleUsersResultItem_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.createroom.impl.components_SearchSingleUserResultItem_null_SearchSingleUserResultItem_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_8,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_SendButton_null_SendButton-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_SendButton_null_SendButton-Night-12_14_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_4,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_10,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_9,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-53_53_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-53_54_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_10,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_8,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_9,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialogContent_null_Dialogs_SingleSelectionDialogContent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.list_SingleSelectionListItemCustomFormattert_null_Listitems_SingleselectionListitem-customformatter_0_null,NEXUS_5,1.0,en]","",0,], @@ -798,7 +815,7 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.list_SingleSelectionListItemUnselectedWithSupportingText_null_Listitems_SingleselectionListitem-noselection,supportingtext_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_SingleSelectionListItem_null_Listitems_SingleselectionListitem-noselection_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_Sliders_null_Sliders_Sliders_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Night-2_4_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Night-2_4_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionAndCloseButton_null_Snackbars_Snackbarwithactionandclosebutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionOnNewLineAndCloseButton_null_Snackbars_Snackbarwithactionandclosebuttononnewline_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionOnNewLine_null_Snackbars_Snackbarwithactiononnewline_0_null,NEXUS_5,1.0,en]","",0,], @@ -808,23 +825,23 @@ export const screenshots = [ ["ui_S_t[l.designsystem.modifiers_SquareSizeModifierLargeHeight_null_SquareSizeModifierLargeHeight_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.modifiers_SquareSizeModifierLargeWidth_null_SquareSizeModifierLargeWidth_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_1,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.location.api_StaticMapView_null_StaticMapView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.location.api_StaticMapView_null_StaticMapView-Night-0_2_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_SunsetPage_null_SunsetPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_SunsetPage_null_SunsetPage-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.button_SuperButton_null_SuperButton-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_SuperButton_null_SuperButton-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_Surface_null_Surface_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_Switch_null_Toggles_Switch_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Day-1_1_null,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Night-1_2_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Day-1_1_null,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Night-1_2_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.theme.components_TextButtonLarge_null_Buttons_TextButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_TextButtonMedium_null_Buttons_TextButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_TextButtonSmall_null_Buttons_TextButtonSmall_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Night-2_4_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Night-1_3_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Night-6_8_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Night-5_7_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Night-7_9_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Night-0_2_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Night-2_4_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Night-1_3_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Night-6_8_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Night-5_7_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Night-7_9_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Night-0_2_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.textcomposer_TextComposerVoice_null_TextComposerVoice-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerVoice_null_TextComposerVoice-Night-4_6_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TextDark_null_Text_TextDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_TextFieldDark_null_TextFields_TextFieldDark_0_null,NEXUS_5,1.0,en]","",0,], @@ -836,174 +853,175 @@ export const screenshots = [ ["ui_S_t[l.designsystem.theme.components_TextFieldValueTextFieldDark_null_TextFields_TextFieldValueTextFieldDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.components_TextFormatting_null_TextFormatting-Day-13_14_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_TextFormatting_null_TextFormatting-Night-13_15_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TextLight_null_Text_TextLight_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerHorizontal_null_DateTimepickers_TimePickerHorizontal_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalDark_null_DateTimepickers_TimePickerVerticalDark_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalLight_null_DateTimepickers_TimePickerVerticalLight_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-15_15_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-15_16_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-37_37_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-37_38_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-33_33_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-33_34_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-58_58_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-58_59_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-34_34_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-34_35_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-17_17_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-17_18_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerHorizontal_null_DateTimepickers_TimePickerHorizontal_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalDark_null_DateTimepickers_TimePickerVerticalDark_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalLight_null_DateTimepickers_TimePickerVerticalLight_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_3,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Day-18_18_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Night-18_19_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-19_19_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-19_20_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-18_18_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-18_19_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-19_19_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-19_20_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-20_20_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-20_21_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-21_21_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-21_22_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_11,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-22_22_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-22_23_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-16_16_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-16_17_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventTimestampBelow_null_TimelineItemEventTimestampBelow_0_null,NEXUS_5,1.0,en]","",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-35_35_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-35_36_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-24_24_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-24_25_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-23_23_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-23_24_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-36_36_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-36_37_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-38_38_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-38_39_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-39_39_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-39_40_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-40_40_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-40_41_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-41_41_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-41_42_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-25_25_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-25_26_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-27_27_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-27_28_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-28_28_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-28_29_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-29_29_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-29_30_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-26_26_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-26_27_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-59_59_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-59_60_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-54_54_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-54_55_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-42_42_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-42_43_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-60_60_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-60_61_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-30_30_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-30_31_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-43_43_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-43_44_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-44_44_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-44_45_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-45_45_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-45_46_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-46_46_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-46_47_null,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-47_47_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-47_48_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-50_50_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-50_51_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_11,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_12,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_13,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_14,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-49_49_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-49_50_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-61_61_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-61_62_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-48_48_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-48_49_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_11,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_12,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_13,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_14,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_15,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_15,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_16,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_16,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-8_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-8_9_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_3,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-21_22_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventTimestampBelow_null_TimelineItemEventTimestampBelow_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TopAppBar_null_AppBars_TopAppBar_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-64_64_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-64_65_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_UnreadIndicatorAtom_null_UnreadIndicatorAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_UnreadIndicatorAtom_null_UnreadIndicatorAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_UnresolvedUserRow_null_UnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19832,], +["ui_S_t[l.matrix.ui.components_UnresolvedUserRow_null_UnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19839,], ["ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en]",19835,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_4,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_5,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_8,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_9,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_9,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_9,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_9,NEXUS_5,1.0,en]",19839,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_4,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_5,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_6,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_7,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_9,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_9,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.ruler_VerticalRuler_null_VerticalRuler-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_VerticalRuler_null_VerticalRuler-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], @@ -1017,12 +1035,12 @@ export const screenshots = [ ["ui_S_t[l.textcomposer.components_VoiceMessagePreview_null_VoiceMessagePreview-Day-15_16_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessagePreview_null_VoiceMessagePreview-Night-15_17_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_VoiceMessageRecorderButton_null_VoiceMessageRecorderButton-Day-16_17_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessageRecorderButton_null_VoiceMessageRecorderButton-Night-16_18_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_VoiceMessageRecording_null_VoiceMessageRecording-Day-17_18_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessageRecording_null_VoiceMessageRecording-Night-17_19_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_0,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_1,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_2,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_3,NEXUS_5,1.0,en]",19832,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_4,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_4,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.components.media_WaveformPlaybackView_null_WaveformPlaybackView-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.media_WaveformPlaybackView_null_WaveformPlaybackView-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Night-1_3_null,NEXUS_5,1.0,en]",19832,], +["ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Night-1_3_null,NEXUS_5,1.0,en]",19839,], ["ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Night_1_null,NEXUS_5,1.0,en]",0,], ]; From f09ae93e3d9cf84b6ac7e776b4463f42e5011ade Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 09:45:58 +0200 Subject: [PATCH 202/289] Remove unused method --- .../messages/impl/timeline/TimelineStateProvider.kt | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index 12820660ab..f2670b7023 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -35,7 +35,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.TransactionId import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState import kotlinx.collections.immutable.ImmutableList @@ -62,16 +61,6 @@ fun aTimelineState( eventSink = eventSink, ) -fun aPaginationStatus( - isPaginating: Boolean = false, - hasMoreToLoad: Boolean = true, -): Timeline.PaginationStatus { - return Timeline.PaginationStatus( - isPaginating = isPaginating, - hasMoreToLoad = hasMoreToLoad, - ) -} - internal fun aTimelineItemList(content: TimelineItemEventContent): ImmutableList { return persistentListOf( // 3 items (First Middle Last) with isMine = false From 683a593b5050cef3ce3e02944849742e580e762a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 09:56:19 +0200 Subject: [PATCH 203/289] Extract extension `setTimelineView` --- .../impl/timeline/TimelineViewTest.kt | 90 ++++++++++--------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt index 0f99e8b558..d16de9f01d 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt @@ -17,11 +17,14 @@ package io.element.android.features.messages.impl.timeline import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel +import io.element.android.features.messages.impl.typing.TypingNotificationState import io.element.android.features.messages.impl.typing.aTypingNotificationState +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.tests.testutils.EnsureNeverCalledWithParam import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams @@ -29,6 +32,7 @@ import io.element.android.tests.testutils.EventsRecorder import kotlinx.collections.immutable.persistentListOf import org.junit.Rule import org.junit.Test +import org.junit.rules.TestRule import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) @@ -38,53 +42,59 @@ class TimelineViewTest { @Test fun `reaching the end of the timeline with more events to load emits a LoadMore event`() { val eventsRecorder = EventsRecorder() - rule.setContent { - TimelineView( - aTimelineState( - timelineItems = persistentListOf( - TimelineItem.Virtual( - id = "backward_pagination", - model = TimelineItemLoadingIndicatorModel(Timeline.PaginationDirection.BACKWARDS, 0) - ), + rule.setTimelineView( + state = aTimelineState( + timelineItems = persistentListOf( + TimelineItem.Virtual( + id = "backward_pagination", + model = TimelineItemLoadingIndicatorModel(Timeline.PaginationDirection.BACKWARDS, 0) ), - eventSink = eventsRecorder, ), - typingNotificationState = aTypingNotificationState(), - onUserDataClicked = EnsureNeverCalledWithParam(), - onLinkClicked = EnsureNeverCalledWithParam(), - onMessageClicked = EnsureNeverCalledWithParam(), - onMessageLongClicked = EnsureNeverCalledWithParam(), - onTimestampClicked = EnsureNeverCalledWithParam(), - onSwipeToReply = EnsureNeverCalledWithParam(), - onReactionClicked = EnsureNeverCalledWithTwoParams(), - onReactionLongClicked = EnsureNeverCalledWithTwoParams(), - onMoreReactionsClicked = EnsureNeverCalledWithParam(), - onReadReceiptClick = EnsureNeverCalledWithParam(), - ) - } + eventSink = eventsRecorder, + ), + ) eventsRecorder.assertSingle(TimelineEvents.LoadMore(Timeline.PaginationDirection.BACKWARDS)) } @Test fun `reaching the end of the timeline does not send a LoadMore event`() { val eventsRecorder = EventsRecorder(expectEvents = false) - rule.setContent { - TimelineView( - aTimelineState( - eventSink = eventsRecorder, - ), - typingNotificationState = aTypingNotificationState(), - onUserDataClicked = EnsureNeverCalledWithParam(), - onLinkClicked = EnsureNeverCalledWithParam(), - onMessageClicked = EnsureNeverCalledWithParam(), - onMessageLongClicked = EnsureNeverCalledWithParam(), - onTimestampClicked = EnsureNeverCalledWithParam(), - onSwipeToReply = EnsureNeverCalledWithParam(), - onReactionClicked = EnsureNeverCalledWithTwoParams(), - onReactionLongClicked = EnsureNeverCalledWithTwoParams(), - onMoreReactionsClicked = EnsureNeverCalledWithParam(), - onReadReceiptClick = EnsureNeverCalledWithParam(), - ) - } + rule.setTimelineView( + state = aTimelineState( + eventSink = eventsRecorder, + ), + ) + } +} + +private fun AndroidComposeTestRule.setTimelineView( + state: TimelineState, + typingNotificationState: TypingNotificationState = aTypingNotificationState(), + onUserDataClicked: (UserId) -> Unit = EnsureNeverCalledWithParam(), + onLinkClicked: (String) -> Unit = EnsureNeverCalledWithParam(), + onMessageClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onMessageLongClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onTimestampClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onSwipeToReply: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onReactionClicked: (emoji: String, TimelineItem.Event) -> Unit = EnsureNeverCalledWithTwoParams(), + onReactionLongClicked: (emoji: String, TimelineItem.Event) -> Unit = EnsureNeverCalledWithTwoParams(), + onMoreReactionsClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onReadReceiptClick: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), +) { + setContent { + TimelineView( + state = state, + typingNotificationState = typingNotificationState, + onUserDataClicked = onUserDataClicked, + onLinkClicked = onLinkClicked, + onMessageClicked = onMessageClicked, + onMessageLongClicked = onMessageLongClicked, + onTimestampClicked = onTimestampClicked, + onSwipeToReply = onSwipeToReply, + onReactionClicked = onReactionClicked, + onReactionLongClicked = onReactionLongClicked, + onMoreReactionsClicked = onMoreReactionsClicked, + onReadReceiptClick = onReadReceiptClick, + ) } } From 33f1cb4abf19fbdf8cfd865208fe794490c42d8e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 10:07:20 +0200 Subject: [PATCH 204/289] Test TimelineView regarding "Jump to bottom" button. --- .../impl/timeline/TimelineStateProvider.kt | 3 +- .../impl/timeline/TimelineViewTest.kt | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index f2670b7023..b9e417b188 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -49,13 +49,14 @@ fun aTimelineState( renderReadReceipts: Boolean = false, timelineRoomInfo: TimelineRoomInfo = aTimelineRoomInfo(), focusedEventIndex: Int = -1, + isLive: Boolean = true, eventSink: (TimelineEvents) -> Unit = {}, ) = TimelineState( timelineItems = timelineItems, timelineRoomInfo = timelineRoomInfo, renderReadReceipts = renderReadReceipts, newEventState = NewEventState.None, - isLive = true, + isLive = isLive, focusedEventId = timelineItems.filterIsInstance().getOrNull(focusedEventIndex)?.eventId, focusRequestState = FocusRequestState.None, eventSink = eventSink, diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt index d16de9f01d..29d46d2da2 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt @@ -19,6 +19,8 @@ package io.element.android.features.messages.impl.timeline import androidx.activity.ComponentActivity import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.performClick import androidx.test.ext.junit.runners.AndroidJUnit4 import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel @@ -26,6 +28,7 @@ import io.element.android.features.messages.impl.typing.TypingNotificationState import io.element.android.features.messages.impl.typing.aTypingNotificationState import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.tests.testutils.EnsureNeverCalledWithParam import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams import io.element.android.tests.testutils.EventsRecorder @@ -65,6 +68,34 @@ class TimelineViewTest { ), ) } + + @Test + fun `scroll to bottom on live timeline does not emit the Event`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + rule.setTimelineView( + state = aTimelineState( + isLive = true, + eventSink = eventsRecorder, + ), + forceJumpToBottomVisibility = true, + ) + val contentDescription = rule.activity.getString(CommonStrings.a11y_jump_to_bottom) + rule.onNodeWithContentDescription(contentDescription).performClick() + } + + @Test + fun `scroll to bottom on detached timeline emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setTimelineView( + state = aTimelineState( + isLive = false, + eventSink = eventsRecorder, + ), + ) + val contentDescription = rule.activity.getString(CommonStrings.a11y_jump_to_bottom) + rule.onNodeWithContentDescription(contentDescription).performClick() + eventsRecorder.assertSingle(TimelineEvents.JumpToLive) + } } private fun AndroidComposeTestRule.setTimelineView( @@ -80,6 +111,7 @@ private fun AndroidComposeTestRule.setTimel onReactionLongClicked: (emoji: String, TimelineItem.Event) -> Unit = EnsureNeverCalledWithTwoParams(), onMoreReactionsClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), onReadReceiptClick: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + forceJumpToBottomVisibility: Boolean = false, ) { setContent { TimelineView( @@ -95,6 +127,7 @@ private fun AndroidComposeTestRule.setTimel onReactionLongClicked = onReactionLongClicked, onMoreReactionsClicked = onMoreReactionsClicked, onReadReceiptClick = onReadReceiptClick, + forceJumpToBottomVisibility = forceJumpToBottomVisibility, ) } } From 137bfdfda90da3ef493c3889a8468ffde96a75f5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 12:15:14 +0200 Subject: [PATCH 205/289] `focusOnLive()` is not suspendable. --- .../features/messages/impl/timeline/TimelinePresenter.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt index 61b2add5cb..d6a02959c0 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt @@ -158,9 +158,7 @@ class TimelinePresenter @AssistedInject constructor( focusRequestState.value = FocusRequestState.None } is TimelineEvents.JumpToLive -> { - localScope.launch { - timelineController.focusOnLive() - } + timelineController.focusOnLive() } } } From 4704b1229b7e317cab75f9bcae950ed13ccac81a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 12:16:14 +0200 Subject: [PATCH 206/289] Add test on focusRequestState for event `TimelineEvents.FocusOnEvent` and `TimelineEvents.JumpToLive` --- .../impl/timeline/TimelinePresenterTest.kt | 113 +++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt index 2161b11a5b..093306db09 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt @@ -22,6 +22,7 @@ import app.cash.turbine.ReceiveTurbine import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.messages.impl.FakeMessagesNavigator +import io.element.android.features.messages.impl.fixtures.aMessageEvent import io.element.android.features.messages.impl.fixtures.aTimelineItemsFactory import io.element.android.features.messages.impl.timeline.factories.TimelineItemsFactory import io.element.android.features.messages.impl.timeline.model.NewEventState @@ -464,6 +465,115 @@ private const val FAKE_UNIQUE_ID_2 = "FAKE_UNIQUE_ID_2" } } + @Test + fun `present - focus on event and jump to live make the presenter update the state with the correct Events`() = runTest { + val detachedTimeline = FakeTimeline( + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Event( + uniqueId = FAKE_UNIQUE_ID, + event = anEventTimelineItem(), + ) + ) + ) + ) + val liveTimeline = FakeTimeline( + timelineItems = flowOf(emptyList()) + ) + val room = FakeMatrixRoom( + liveTimeline = liveTimeline, + ).apply { + givenTimelineFocusedOnEventResult(Result.success(detachedTimeline)) + } + val presenter = createTimelinePresenter( + room = room, + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink.invoke(TimelineEvents.FocusOnEvent(AN_EVENT_ID)) + awaitItem().also { state -> + assertThat(state.focusedEventId).isEqualTo(AN_EVENT_ID) + assertThat(state.focusRequestState).isEqualTo(FocusRequestState.Fetching) + } + skipItems(2) + awaitItem().also { state -> + assertThat(state.focusRequestState).isEqualTo(FocusRequestState.Fetched) + assertThat(state.timelineItems).isNotEmpty() + } + initialState.eventSink.invoke(TimelineEvents.JumpToLive) + skipItems(1) + awaitItem().also { state -> + // Event stays focused + assertThat(state.focusedEventId).isEqualTo(AN_EVENT_ID) + assertThat(state.timelineItems).isEmpty() + } + } + } + + @Test + fun `present - focus on known event retrieves the event from cache`() = runTest { + val timelineItemIndexer = TimelineItemIndexer().apply { + process(listOf(aMessageEvent(eventId = AN_EVENT_ID))) + } + val presenter = createTimelinePresenter( + room = FakeMatrixRoom( + liveTimeline = FakeTimeline( + timelineItems = flowOf( + listOf( + MatrixTimelineItem.Event( + uniqueId = FAKE_UNIQUE_ID, + event = anEventTimelineItem(eventId = AN_EVENT_ID), + ) + ) + ) + ), + ), + timelineItemIndexer = timelineItemIndexer, + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink.invoke(TimelineEvents.FocusOnEvent(AN_EVENT_ID)) + awaitItem().also { state -> + assertThat(state.focusedEventId).isEqualTo(AN_EVENT_ID) + assertThat(state.focusRequestState).isEqualTo(FocusRequestState.Cached(0)) + } + } + } + + @Test + fun `present - focus on event error case`() = runTest { + val presenter = createTimelinePresenter( + room = FakeMatrixRoom( + liveTimeline = FakeTimeline( + timelineItems = flowOf(emptyList()), + ), + ).apply { + givenTimelineFocusedOnEventResult(Result.failure(Throwable("An error"))) + }, + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink(TimelineEvents.FocusOnEvent(AN_EVENT_ID)) + awaitItem().also { state -> + assertThat(state.focusedEventId).isEqualTo(AN_EVENT_ID) + assertThat(state.focusRequestState).isEqualTo(FocusRequestState.Fetching) + } + awaitItem().also { state -> + assertThat(state.focusRequestState).isInstanceOf(FocusRequestState.Failure::class.java) + state.eventSink(TimelineEvents.ClearFocusRequestState) + } + awaitItem().also { state -> + assertThat(state.focusRequestState).isEqualTo(FocusRequestState.None) + } + } + } + @Test fun `present - when room member info is loaded, read receipts info should be updated`() = runTest { val timeline = FakeTimeline( @@ -523,6 +633,7 @@ private const val FAKE_UNIQUE_ID_2 = "FAKE_UNIQUE_ID_2" endPollAction: EndPollAction = FakeEndPollAction(), sendPollResponseAction: SendPollResponseAction = FakeSendPollResponseAction(), sessionPreferencesStore: InMemorySessionPreferencesStore = InMemorySessionPreferencesStore(), + timelineItemIndexer: TimelineItemIndexer = TimelineItemIndexer(), ): TimelinePresenter { return TimelinePresenter( timelineItemsFactory = timelineItemsFactory, @@ -534,7 +645,7 @@ private const val FAKE_UNIQUE_ID_2 = "FAKE_UNIQUE_ID_2" endPollAction = endPollAction, sendPollResponseAction = sendPollResponseAction, sessionPreferencesStore = sessionPreferencesStore, - timelineItemIndexer = TimelineItemIndexer(), + timelineItemIndexer = timelineItemIndexer, timelineController = TimelineController(room), ) } From 1be2e183c82e5865a5f73891a35a233b255ecd2c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 14:09:06 +0200 Subject: [PATCH 207/289] Remove unused `newTimelineById` --- .../messages/impl/timeline/factories/TimelineItemsFactory.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt index 8b5b644a23..d3e21d0042 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt @@ -81,7 +81,6 @@ class TimelineItemsFactory @Inject constructor( roomMembers: List, ) { val newTimelineItemStates = ArrayList() - val newTimelineById = mutableMapOf() for (index in diffCache.indices().reversed()) { val cacheItem = diffCache.get(index) if (cacheItem == null) { @@ -98,7 +97,6 @@ class TimelineItemsFactory @Inject constructor( } else { cacheItem } - newTimelineById[updatedItem.identifier()] = updatedItem newTimelineItemStates.add(updatedItem) } } From a8d66ec7e2709f51908012195ff174288e0451e8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 14:16:12 +0200 Subject: [PATCH 208/289] Add documentation on new API. --- .../android/libraries/matrix/api/room/MatrixRoom.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 86e943fea9..fc4ded247a 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -98,8 +98,15 @@ interface MatrixRoom : Closeable { val syncUpdateFlow: StateFlow + /** + * The live timeline of the room. Must be used to send Event to a room. + */ val liveTimeline: Timeline + /** + * Create a new timeline, focused on the provided Event. + * Should not be used directly, see `TimelineController` to manage the various timelines. + */ suspend fun timelineFocusedOnEvent(eventId: EventId): Result fun destroy() From 8eccd1b6e1db39e04747dc7034197e0b2d27c15f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 14:20:46 +0200 Subject: [PATCH 209/289] Code optimization. --- .../postprocessor/LastForwardIndicatorsPostProcessor.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt index 8db3952f0d..d717fac00d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/LastForwardIndicatorsPostProcessor.kt @@ -65,10 +65,7 @@ private fun createLastForwardIndicator(identifier: String): MatrixTimelineItem { private fun List.latestEventIdentifier(): String { return findLast { - when (it) { - is MatrixTimelineItem.Event -> true - else -> false - } + it is MatrixTimelineItem.Event }?.let { (it as MatrixTimelineItem.Event).uniqueId } ?: "fake_id" From 37d0b9c6ef9ea659425a37bca280ffe9ff3a7428 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 14:27:07 +0200 Subject: [PATCH 210/289] No need to keep `innerTimeline` as a class member. --- .../android/libraries/matrix/impl/room/RustMatrixRoom.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index e0f992a367..43a097298c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -94,7 +94,7 @@ class RustMatrixRoom( private val isKeyBackupEnabled: Boolean, private val roomListItem: RoomListItem, private val innerRoom: InnerRoom, - private val innerTimeline: InnerTimeline, + innerTimeline: InnerTimeline, private val roomNotificationSettingsService: RustNotificationSettingsService, sessionCoroutineScope: CoroutineScope, private val coroutineDispatchers: CoroutineDispatchers, From 0190d5da45b9ccb88b6b4b316158143d5bfb96e2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 14:28:04 +0200 Subject: [PATCH 211/289] Remove unnecessary default value. --- .../android/libraries/matrix/impl/room/RustMatrixRoom.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 43a097298c..a981a64fd2 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -618,7 +618,7 @@ class RustMatrixRoom( private fun createTimeline( timeline: InnerTimeline, - isLive: Boolean = true, + isLive: Boolean, onNewSyncedEvent: () -> Unit = {}, ): Timeline { return RustTimeline( From ddb00a2c51d1f9ed3e41d2454809650b62c6c7ea Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 15:48:58 +0200 Subject: [PATCH 212/289] Add log in case of error. --- .../android/libraries/matrix/impl/timeline/RustTimeline.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 39469b552c..198f231ccb 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -299,6 +299,8 @@ class RustTimeline( specialModeEventTimelineItem?.destroy() specialModeEventTimelineItem = null specialModeEventTimelineItem = eventId?.let { inner.getEventTimelineItemByEventId(it.value) } + }.onFailure { + Timber.e(it, "Unable to retrieve event for special mode. Are you using the correct timeline?") } } From 49dd4ad803c76c22e57baefa6ee57952f3a6ed4c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 15:50:56 +0200 Subject: [PATCH 213/289] Ensure `editMessage`, `enterSpecialMode` and `replyMessage` are called on the current timeline. --- .../libraries/matrix/api/room/MatrixRoom.kt | 6 ----- .../matrix/impl/room/RustMatrixRoom.kt | 18 ------------- .../matrix/test/room/FakeMatrixRoom.kt | 26 ------------------- 3 files changed, 50 deletions(-) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index fc4ded247a..33cd86c005 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -131,12 +131,6 @@ interface MatrixRoom : Closeable { suspend fun sendMessage(body: String, htmlBody: String?, mentions: List): Result - suspend fun editMessage(originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List): Result - - suspend fun enterSpecialMode(eventId: EventId?): Result - - suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result - suspend fun redactEvent(eventId: EventId, reason: String? = null): Result suspend fun sendImage( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index a981a64fd2..1fe5d78627 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -326,24 +326,6 @@ class RustMatrixRoom( return liveTimeline.sendMessage(body, htmlBody, mentions) } - override suspend fun editMessage( - originalEventId: EventId?, - transactionId: TransactionId?, - body: String, - htmlBody: String?, - mentions: List, - ): Result { - return liveTimeline.editMessage(originalEventId, transactionId, body, htmlBody, mentions) - } - - override suspend fun enterSpecialMode(eventId: EventId?): Result { - return liveTimeline.enterSpecialMode(eventId) - } - - override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result { - return liveTimeline.replyMessage(eventId, body, htmlBody, mentions) - } - override suspend fun redactEvent(eventId: EventId, reason: String?) = withContext(roomDispatcher) { runCatching { innerRoom.redact(eventId.value, reason) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index 7a6920e4dc..a435a7a4ca 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -134,7 +134,6 @@ class FakeMatrixRoom( private var updatePowerLevelsResult = Result.success(Unit) private var resetPowerLevelsResult = Result.success(defaultRoomPowerLevels()) var sendMessageMentions = emptyList() - val editMessageCalls = mutableListOf>() private val _typingRecord = mutableListOf() val typingRecord: List get() = _typingRecord @@ -296,31 +295,6 @@ class FakeMatrixRoom( return eventPermalinkResult(eventId) } - override suspend fun editMessage( - originalEventId: EventId?, - transactionId: TransactionId?, - body: String, - htmlBody: String?, - mentions: List - ): Result { - sendMessageMentions = mentions - editMessageCalls += body to htmlBody - return Result.success(Unit) - } - - var replyMessageParameter: Pair? = null - private set - - override suspend fun enterSpecialMode(eventId: EventId?): Result { - return Result.success(Unit) - } - - override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List): Result { - sendMessageMentions = mentions - replyMessageParameter = body to htmlBody - return Result.success(Unit) - } - var redactEventEventIdParam: EventId? = null private set From b7970b2db89eadab5dfd8af77c2c7dd0ff080b6e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 17:41:25 +0200 Subject: [PATCH 214/289] Map all replyTo data and add preview for loading and erorr case. --- .../components/TimelineItemEventRow.kt | 78 +++++++++++++++---- ...melineItemEventRowWithReplyOtherPreview.kt | 40 ++++++++++ .../TimelineItemEventRowWithReplyPreview.kt | 2 +- .../impl/timeline/model/InReplyToDetails.kt | 25 +++--- .../impl/timeline/model/InReplyToMetadata.kt | 2 +- .../api/timeline/item/event/InReplyTo.kt | 7 +- .../timeline/item/event/EventMessageMapper.kt | 13 +++- 7 files changed, 138 insertions(+), 29 deletions(-) create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyOtherPreview.kt 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 b5c60bb2af..1b9655c471 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 @@ -24,7 +24,6 @@ import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.draggable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Arrangement.spacedBy import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -94,6 +93,7 @@ import io.element.android.features.messages.impl.timeline.model.event.aTimelineI import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.timeline.model.event.canBeRepliedTo import io.element.android.features.messages.impl.timeline.model.metadata +import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.colors.AvatarColorsProvider import io.element.android.libraries.designsystem.components.EqualWidthColumn import io.element.android.libraries.designsystem.components.avatar.Avatar @@ -437,7 +437,7 @@ private fun MessageEventBubbleContent( ) { Row( modifier = modifier, - horizontalArrangement = spacedBy(4.dp, Alignment.Start), + horizontalArrangement = Arrangement.spacedBy(4.dp, Alignment.Start), verticalAlignment = Alignment.CenterVertically, ) { Icon( @@ -565,16 +565,30 @@ private fun MessageEventBubbleContent( } val inReplyTo = @Composable { inReplyTo: InReplyToDetails -> val topPadding = if (showThreadDecoration) 0.dp else 8.dp - ReplyToContent( - senderId = inReplyTo.senderId, - senderProfile = inReplyTo.senderProfile, - metadata = inReplyTo.metadata(), - modifier = Modifier - .padding(top = topPadding, start = 8.dp, end = 8.dp) - .clip(RoundedCornerShape(6.dp)) - // FIXME when a node is clickable, its contents won't be added to the semantics tree of its parent -// .clickable(enabled = true, onClick = inReplyToClick) - ) + val inReplyToModifier = Modifier + .padding(top = topPadding, start = 8.dp, end = 8.dp) + .clip(RoundedCornerShape(6.dp)) + // FIXME when a node is clickable, its contents won't be added to the semantics tree of its parent + // .clickable(enabled = true, onClick = inReplyToClick) + when (inReplyTo) { + is InReplyToDetails.Ready -> { + ReplyToContent( + senderId = inReplyTo.senderId, + senderProfile = inReplyTo.senderProfile, + metadata = inReplyTo.metadata(), + modifier = inReplyToModifier, + ) + } + is InReplyToDetails.Error -> + ReplyToErrorContent( + data = inReplyTo, + modifier = inReplyToModifier, + ) + is InReplyToDetails.Loading -> + ReplyToLoadingContent( + modifier = inReplyToModifier, + ) + } } if (inReplyToDetails != null) { // Use SubComposeLayout only if necessary as it can have consequences on the performance. @@ -584,7 +598,7 @@ private fun MessageEventBubbleContent( contentWithTimestamp() } } else { - Column(modifier = modifier, verticalArrangement = spacedBy(8.dp)) { + Column(modifier = modifier, verticalArrangement = Arrangement.spacedBy(8.dp)) { threadDecoration() contentWithTimestamp() } @@ -652,6 +666,44 @@ private fun ReplyToContent( } } +@Composable +private fun ReplyToLoadingContent( + modifier: Modifier = Modifier, +) { + val paddings = PaddingValues(horizontal = 12.dp, vertical = 4.dp) + Row( + modifier + .background(MaterialTheme.colorScheme.surface) + .padding(paddings) + ) { + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + PlaceholderAtom(width = 80.dp, height = 12.dp) + PlaceholderAtom(width = 140.dp, height = 14.dp) + } + } +} + +@Composable +private fun ReplyToErrorContent( + data: InReplyToDetails.Error, + modifier: Modifier = Modifier, +) { + val paddings = PaddingValues(horizontal = 12.dp, vertical = 4.dp) + Row( + modifier + .background(MaterialTheme.colorScheme.surface) + .padding(paddings) + ) { + Text( + text = data.message, + style = ElementTheme.typography.fontBodyMdRegular, + color = MaterialTheme.colorScheme.error, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + } +} + @Composable private fun ReplyToContentText(metadata: InReplyToMetadata?) { val text = when (metadata) { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyOtherPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyOtherPreview.kt new file mode 100644 index 0000000000..2231af606d --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyOtherPreview.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.impl.timeline.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.PreviewParameter +import io.element.android.features.messages.impl.timeline.model.InReplyToDetails +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.matrix.api.core.EventId + +@PreviewsDayNight +@Composable +internal fun TimelineItemEventRowWithReplyOtherPreview( + @PreviewParameter(InReplyToDetailsOtherProvider::class) inReplyToDetails: InReplyToDetails, +) = ElementPreview { + TimelineItemEventRowWithReplyContentToPreview(inReplyToDetails) +} + +class InReplyToDetailsOtherProvider : InReplyToDetailsProvider() { + override val values: Sequence + get() = sequenceOf( + InReplyToDetails.Loading(eventId = EventId("\$anEventId")), + InReplyToDetails.Error(eventId = EventId("\$anEventId"), message = "An error message."), + ) +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt index 8c59c3c07a..b1500dac2c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt @@ -170,7 +170,7 @@ open class InReplyToDetailsProvider : PreviewParameterProvider protected fun aInReplyToDetails( eventContent: EventContent, displayNameAmbiguous: Boolean = false, - ) = InReplyToDetails( + ) = InReplyToDetails.Ready( eventId = EventId("\$event"), eventContent = eventContent, senderId = UserId("@Sender:domain"), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt index 83627b5b25..41fda8c294 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt @@ -27,18 +27,23 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StickerConten import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.matrix.ui.messages.toPlainText -data class InReplyToDetails( - val eventId: EventId, - val senderId: UserId, - val senderProfile: ProfileTimelineDetails, - val eventContent: EventContent?, - val textContent: String?, -) +sealed class InReplyToDetails(val eventId: EventId) { + class Ready( + eventId: EventId, + val senderId: UserId, + val senderProfile: ProfileTimelineDetails, + val eventContent: EventContent?, + val textContent: String?, + ) : InReplyToDetails(eventId) + + class Loading(eventId: EventId) : InReplyToDetails(eventId) + class Error(eventId: EventId, val message: String) : InReplyToDetails(eventId) +} fun InReplyTo.map( permalinkParser: PermalinkParser, ) = when (this) { - is InReplyTo.Ready -> InReplyToDetails( + is InReplyTo.Ready -> InReplyToDetails.Ready( eventId = eventId, senderId = senderId, senderProfile = senderProfile, @@ -55,5 +60,7 @@ fun InReplyTo.map( else -> null } ) - else -> null + is InReplyTo.Error -> InReplyToDetails.Error(eventId, message) + is InReplyTo.NotLoaded -> InReplyToDetails.Loading(eventId) + is InReplyTo.Pending -> InReplyToDetails.Loading(eventId) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadata.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadata.kt index fb63912b69..ee6589f046 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadata.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadata.kt @@ -66,7 +66,7 @@ internal sealed interface InReplyToMetadata { * Metadata can be either a thumbnail with a text OR just a text. */ @Composable -internal fun InReplyToDetails.metadata(): InReplyToMetadata? = when (eventContent) { +internal fun InReplyToDetails.Ready.metadata(): InReplyToMetadata? = when (eventContent) { is MessageContent -> when (val type = eventContent.type) { is ImageMessageType -> InReplyToMetadata.Thumbnail( AttachmentThumbnailInfo( diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/InReplyTo.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/InReplyTo.kt index 1337491ff8..bdf3c2f6dc 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/InReplyTo.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/InReplyTo.kt @@ -26,7 +26,7 @@ sealed interface InReplyTo { data class NotLoaded(val eventId: EventId) : InReplyTo /** The event details are pending to be fetched. We should **not** fetch them again. */ - data object Pending : InReplyTo + data class Pending(val eventId: EventId) : InReplyTo /** The event details are available. */ data class Ready( @@ -44,5 +44,8 @@ sealed interface InReplyTo { * If the reason for the failure is consistent on the server, we'd enter a loop * where we keep trying to fetch the same event. * */ - data object Error : InReplyTo + data class Error( + val eventId: EventId, + val message: String, + ) : InReplyTo } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt index d3a9294cc2..09a66fa656 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt @@ -57,9 +57,16 @@ class EventMessageMapper { senderProfile = event.senderProfile.map(), ) } - is RepliedToEventDetails.Error -> InReplyTo.Error - is RepliedToEventDetails.Pending -> InReplyTo.Pending - is RepliedToEventDetails.Unavailable -> InReplyTo.NotLoaded(inReplyToId) + is RepliedToEventDetails.Error -> InReplyTo.Error( + eventId = inReplyToId, + message = event.message, + ) + RepliedToEventDetails.Pending -> InReplyTo.Pending( + eventId = inReplyToId, + ) + is RepliedToEventDetails.Unavailable -> InReplyTo.NotLoaded( + eventId = inReplyToId + ) } } MessageContent( From e49d0981729ca7b51a2a52a31f4b8180a58f8adb Mon Sep 17 00:00:00 2001 From: ElementBot Date: Mon, 29 Apr 2024 15:50:42 +0000 Subject: [PATCH 215/289] Update screenshots --- ...mojiItem_null_EmojiItem-Day-34_34_null,NEXUS_5,1.0,en].png} | 0 ...jiItem_null_EmojiItem-Night-34_35_null,NEXUS_5,1.0,en].png} | 0 ...Picker_null_EmojiPicker-Day-35_35_null,NEXUS_5,1.0,en].png} | 0 ...cker_null_EmojiPicker-Night-35_36_null,NEXUS_5,1.0,en].png} | 0 ...ton_null_ProgressButton-Day-54_54_null,NEXUS_5,1.0,en].png} | 0 ...n_null_ProgressButton-Night-54_55_null,NEXUS_5,1.0,en].png} | 0 ...lineImageWithCaptionRow-Day-40_40_null,NEXUS_5,1.0,en].png} | 0 ...neImageWithCaptionRow-Night-40_41_null,NEXUS_5,1.0,en].png} | 0 ...TimelineItemAudioView-Day-36_36_null_0,NEXUS_5,1.0,en].png} | 0 ...TimelineItemAudioView-Day-36_36_null_1,NEXUS_5,1.0,en].png} | 0 ...TimelineItemAudioView-Day-36_36_null_2,NEXUS_5,1.0,en].png} | 0 ...melineItemAudioView-Night-36_37_null_0,NEXUS_5,1.0,en].png} | 0 ...melineItemAudioView-Night-36_37_null_1,NEXUS_5,1.0,en].png} | 0 ...melineItemAudioView-Night-36_37_null_2,NEXUS_5,1.0,en].png} | 0 ...melineItemEncryptedView-Day-37_37_null,NEXUS_5,1.0,en].png} | 0 ...lineItemEncryptedView-Night-37_38_null,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemFileView-Day-38_38_null_0,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemFileView-Day-38_38_null_1,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemFileView-Day-38_38_null_2,NEXUS_5,1.0,en].png} | 0 ...imelineItemFileView-Night-38_39_null_0,NEXUS_5,1.0,en].png} | 0 ...imelineItemFileView-Night-38_39_null_1,NEXUS_5,1.0,en].png} | 0 ...imelineItemFileView-Night-38_39_null_2,NEXUS_5,1.0,en].png} | 0 ...TimelineItemImageView-Day-39_39_null_0,NEXUS_5,1.0,en].png} | 0 ...TimelineItemImageView-Day-39_39_null_1,NEXUS_5,1.0,en].png} | 0 ...TimelineItemImageView-Day-39_39_null_2,NEXUS_5,1.0,en].png} | 0 ...melineItemImageView-Night-39_40_null_0,NEXUS_5,1.0,en].png} | 0 ...melineItemImageView-Night-39_40_null_1,NEXUS_5,1.0,en].png} | 0 ...melineItemImageView-Night-39_40_null_2,NEXUS_5,1.0,en].png} | 0 ...lineItemInformativeView-Day-41_41_null,NEXUS_5,1.0,en].png} | 0 ...neItemInformativeView-Night-41_42_null,NEXUS_5,1.0,en].png} | 0 ...temLegacyCallInviteView-Day-42_42_null,NEXUS_5,1.0,en].png} | 0 ...mLegacyCallInviteView-Night-42_43_null,NEXUS_5,1.0,en].png} | 0 ...elineItemLocationView-Day-43_43_null_0,NEXUS_5,1.0,en].png} | 0 ...elineItemLocationView-Day-43_43_null_1,NEXUS_5,1.0,en].png} | 0 ...ineItemLocationView-Night-43_44_null_0,NEXUS_5,1.0,en].png} | 0 ...ineItemLocationView-Night-43_44_null_1,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemPollView-Day-44_44_null_0,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemPollView-Day-44_44_null_1,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemPollView-Day-44_44_null_2,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemPollView-Day-44_44_null_3,NEXUS_5,1.0,en].png} | 0 ...imelineItemPollView-Night-44_45_null_0,NEXUS_5,1.0,en].png} | 0 ...imelineItemPollView-Night-44_45_null_1,NEXUS_5,1.0,en].png} | 0 ...imelineItemPollView-Night-44_45_null_2,NEXUS_5,1.0,en].png} | 0 ...imelineItemPollView-Night-44_45_null_3,NEXUS_5,1.0,en].png} | 0 ...imelineItemRedactedView-Day-45_45_null,NEXUS_5,1.0,en].png} | 0 ...elineItemRedactedView-Night-45_46_null,NEXUS_5,1.0,en].png} | 0 ...l_TimelineItemStateView-Day-46_46_null,NEXUS_5,1.0,en].png} | 0 ...TimelineItemStateView-Night-46_47_null,NEXUS_5,1.0,en].png} | 0 ...melineItemStickerView-Day-47_47_null_0,NEXUS_5,1.0,en].png} | 0 ...melineItemStickerView-Day-47_47_null_1,NEXUS_5,1.0,en].png} | 0 ...melineItemStickerView-Day-47_47_null_2,NEXUS_5,1.0,en].png} | 0 ...lineItemStickerView-Night-47_48_null_0,NEXUS_5,1.0,en].png} | 0 ...lineItemStickerView-Night-47_48_null_1,NEXUS_5,1.0,en].png} | 0 ...lineItemStickerView-Night-47_48_null_2,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemTextView-Day-48_48_null_0,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemTextView-Day-48_48_null_1,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemTextView-Day-48_48_null_2,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemTextView-Day-48_48_null_3,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemTextView-Day-48_48_null_4,NEXUS_5,1.0,en].png} | 0 ..._TimelineItemTextView-Day-48_48_null_5,NEXUS_5,1.0,en].png} | 0 ...imelineItemTextView-Night-48_49_null_0,NEXUS_5,1.0,en].png} | 0 ...imelineItemTextView-Night-48_49_null_1,NEXUS_5,1.0,en].png} | 0 ...imelineItemTextView-Night-48_49_null_2,NEXUS_5,1.0,en].png} | 0 ...imelineItemTextView-Night-48_49_null_3,NEXUS_5,1.0,en].png} | 0 ...imelineItemTextView-Night-48_49_null_4,NEXUS_5,1.0,en].png} | 0 ...imelineItemTextView-Night-48_49_null_5,NEXUS_5,1.0,en].png} | 0 ...TimelineItemUnknownView-Day-49_49_null,NEXUS_5,1.0,en].png} | 0 ...melineItemUnknownView-Night-49_50_null,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVideoView-Day-50_50_null_0,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVideoView-Day-50_50_null_1,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVideoView-Day-50_50_null_2,NEXUS_5,1.0,en].png} | 0 ...melineItemVideoView-Night-50_51_null_0,NEXUS_5,1.0,en].png} | 0 ...melineItemVideoView-Night-50_51_null_1,NEXUS_5,1.0,en].png} | 0 ...melineItemVideoView-Night-50_51_null_2,NEXUS_5,1.0,en].png} | 0 ...ineItemVoiceViewUnified-Day-53_53_null,NEXUS_5,1.0,en].png} | 0 ...eItemVoiceViewUnified-Night-53_54_null,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_0,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_1,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-52_52_null_10,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-52_52_null_11,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-52_52_null_12,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-52_52_null_13,NEXUS_5,1.0,en].png} | 0 ...imelineItemVoiceView-Day-52_52_null_14,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_2,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_3,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_4,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_5,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_6,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_7,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_8,NEXUS_5,1.0,en].png} | 0 ...TimelineItemVoiceView-Day-52_52_null_9,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_0,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_1,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-52_53_null_10,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-52_53_null_11,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-52_53_null_12,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-52_53_null_13,NEXUS_5,1.0,en].png} | 0 ...elineItemVoiceView-Night-52_53_null_14,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_2,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_3,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_4,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_5,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_6,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_7,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_8,NEXUS_5,1.0,en].png} | 0 ...melineItemVoiceView-Night-52_53_null_9,NEXUS_5,1.0,en].png} | 0 ...lineVideoWithCaptionRow-Day-51_51_null,NEXUS_5,1.0,en].png} | 0 ...neVideoWithCaptionRow-Night-51_52_null,NEXUS_5,1.0,en].png} | 0 ...ew_null_GroupHeaderView-Day-55_55_null,NEXUS_5,1.0,en].png} | 0 ..._null_GroupHeaderView-Night-55_56_null,NEXUS_5,1.0,en].png} | 0 ...ent_null_SheetContent-Day-56_56_null_0,NEXUS_5,1.0,en].png} | 0 ...t_null_SheetContent-Night-56_57_null_0,NEXUS_5,1.0,en].png} | 0 ...eadReceiptBottomSheet-Day-58_58_null_0,NEXUS_5,1.0,en].png} | 0 ...eadReceiptBottomSheet-Day-58_58_null_1,NEXUS_5,1.0,en].png} | 0 ...eadReceiptBottomSheet-Day-58_58_null_2,NEXUS_5,1.0,en].png} | 0 ...eadReceiptBottomSheet-Day-58_58_null_3,NEXUS_5,1.0,en].png} | 0 ...eadReceiptBottomSheet-Day-58_58_null_4,NEXUS_5,1.0,en].png} | 0 ...eadReceiptBottomSheet-Day-58_58_null_5,NEXUS_5,1.0,en].png} | 0 ...dReceiptBottomSheet-Night-58_59_null_0,NEXUS_5,1.0,en].png} | 0 ...dReceiptBottomSheet-Night-58_59_null_1,NEXUS_5,1.0,en].png} | 0 ...dReceiptBottomSheet-Night-58_59_null_2,NEXUS_5,1.0,en].png} | 0 ...dReceiptBottomSheet-Night-58_59_null_3,NEXUS_5,1.0,en].png} | 0 ...dReceiptBottomSheet-Night-58_59_null_4,NEXUS_5,1.0,en].png} | 0 ...dReceiptBottomSheet-Night-58_59_null_5,NEXUS_5,1.0,en].png} | 0 ...neItemReadReceiptView-Day-57_57_null_0,NEXUS_5,1.0,en].png} | 0 ...neItemReadReceiptView-Day-57_57_null_1,NEXUS_5,1.0,en].png} | 0 ...neItemReadReceiptView-Day-57_57_null_2,NEXUS_5,1.0,en].png} | 0 ...neItemReadReceiptView-Day-57_57_null_3,NEXUS_5,1.0,en].png} | 0 ...neItemReadReceiptView-Day-57_57_null_4,NEXUS_5,1.0,en].png} | 0 ...neItemReadReceiptView-Day-57_57_null_5,NEXUS_5,1.0,en].png} | 0 ...neItemReadReceiptView-Day-57_57_null_6,NEXUS_5,1.0,en].png} | 0 ...neItemReadReceiptView-Day-57_57_null_7,NEXUS_5,1.0,en].png} | 0 ...ItemReadReceiptView-Night-57_58_null_0,NEXUS_5,1.0,en].png} | 0 ...ItemReadReceiptView-Night-57_58_null_1,NEXUS_5,1.0,en].png} | 0 ...ItemReadReceiptView-Night-57_58_null_2,NEXUS_5,1.0,en].png} | 0 ...ItemReadReceiptView-Night-57_58_null_3,NEXUS_5,1.0,en].png} | 0 ...ItemReadReceiptView-Night-57_58_null_4,NEXUS_5,1.0,en].png} | 0 ...ItemReadReceiptView-Night-57_58_null_5,NEXUS_5,1.0,en].png} | 0 ...ItemReadReceiptView-Night-57_58_null_6,NEXUS_5,1.0,en].png} | 0 ...ItemReadReceiptView-Night-57_58_null_7,NEXUS_5,1.0,en].png} | 0 ..._RetrySendMessageMenu-Day-59_59_null_0,NEXUS_5,1.0,en].png} | 0 ..._RetrySendMessageMenu-Day-59_59_null_1,NEXUS_5,1.0,en].png} | 0 ...etrySendMessageMenu-Night-59_60_null_0,NEXUS_5,1.0,en].png} | 0 ...etrySendMessageMenu-Night-59_60_null_1,NEXUS_5,1.0,en].png} | 0 ...ryptedHistoryBannerView-Day-60_60_null,NEXUS_5,1.0,en].png} | 0 ...ptedHistoryBannerView-Night-60_61_null,NEXUS_5,1.0,en].png} | 0 ...eItemDaySeparatorView-Day-61_61_null_0,NEXUS_5,1.0,en].png} | 0 ...eItemDaySeparatorView-Day-61_61_null_1,NEXUS_5,1.0,en].png} | 0 ...temDaySeparatorView-Night-61_62_null_0,NEXUS_5,1.0,en].png} | 0 ...temDaySeparatorView-Night-61_62_null_1,NEXUS_5,1.0,en].png} | 0 ...elineItemReadMarkerView-Day-62_62_null,NEXUS_5,1.0,en].png} | 0 ...ineItemReadMarkerView-Night-62_63_null,NEXUS_5,1.0,en].png} | 0 ...neItemRoomBeginningView-Day-63_63_null,NEXUS_5,1.0,en].png} | 0 ...ItemRoomBeginningView-Night-63_64_null,NEXUS_5,1.0,en].png} | 0 ...ineLoadingMoreIndicator-Day-64_64_null,NEXUS_5,1.0,en].png} | 0 ...eLoadingMoreIndicator-Night-64_65_null,NEXUS_5,1.0,en].png} | 0 ...EventRowWithReplyOther-Day-24_24_null_0,NEXUS_5,1.0,en].png | 3 +++ ...EventRowWithReplyOther-Day-24_24_null_1,NEXUS_5,1.0,en].png | 3 +++ ...entRowWithReplyOther-Night-24_25_null_0,NEXUS_5,1.0,en].png | 3 +++ ...entRowWithReplyOther-Night-24_25_null_1,NEXUS_5,1.0,en].png | 3 +++ ...ItemEventRowWithReply-Day-25_25_null_0,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_1,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-25_25_null_10,NEXUS_5,1.0,en].png} | 0 ...temEventRowWithReply-Day-25_25_null_11,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_2,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_3,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_4,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_5,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_6,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_7,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_8,NEXUS_5,1.0,en].png} | 0 ...ItemEventRowWithReply-Day-25_25_null_9,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_0,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_1,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-25_26_null_10,NEXUS_5,1.0,en].png} | 0 ...mEventRowWithReply-Night-25_26_null_11,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_2,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_3,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_4,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_5,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_6,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_7,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_8,NEXUS_5,1.0,en].png} | 0 ...emEventRowWithReply-Night-25_26_null_9,NEXUS_5,1.0,en].png} | 0 ...ventsRowContentCollapse-Day-27_27_null,NEXUS_5,1.0,en].png} | 0 ...ntsRowContentCollapse-Night-27_28_null,NEXUS_5,1.0,en].png} | 0 ...ventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,en].png} | 0 ...ntsRowContentExpanded-Night-26_27_null,NEXUS_5,1.0,en].png} | 0 ...lineItemReactionsLayout-Day-28_28_null,NEXUS_5,1.0,en].png} | 0 ...neItemReactionsLayout-Night-28_29_null,NEXUS_5,1.0,en].png} | 0 ...ineItemReactionsViewFew-Day-30_30_null,NEXUS_5,1.0,en].png} | 0 ...eItemReactionsViewFew-Night-30_31_null,NEXUS_5,1.0,en].png} | 0 ...emReactionsViewIncoming-Day-31_31_null,NEXUS_5,1.0,en].png} | 0 ...ReactionsViewIncoming-Night-31_32_null,NEXUS_5,1.0,en].png} | 0 ...emReactionsViewOutgoing-Day-32_32_null,NEXUS_5,1.0,en].png} | 0 ...ReactionsViewOutgoing-Night-32_33_null,NEXUS_5,1.0,en].png} | 0 ...melineItemReactionsView-Day-29_29_null,NEXUS_5,1.0,en].png} | 0 ...lineItemReactionsView-Night-29_30_null,NEXUS_5,1.0,en].png} | 0 ...melineItemStateEventRow-Day-33_33_null,NEXUS_5,1.0,en].png} | 0 ...lineItemStateEventRow-Night-33_34_null,NEXUS_5,1.0,en].png} | 0 ...null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png} | 0 ...ll_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en].png} | 0 ...FocusRequestStateView-Day-66_66_null_0,NEXUS_5,1.0,en].png} | 0 ...FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,en].png} | 0 ...FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,en].png} | 0 ...FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,en].png} | 0 ...cusRequestStateView-Night-66_67_null_0,NEXUS_5,1.0,en].png} | 0 ...cusRequestStateView-Night-66_67_null_1,NEXUS_5,1.0,en].png} | 0 ...cusRequestStateView-Night-66_67_null_2,NEXUS_5,1.0,en].png} | 0 ...cusRequestStateView-Night-66_67_null_3,NEXUS_5,1.0,en].png} | 0 ...essagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,en].png} | 0 ...essagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,en].png} | 0 ...essagesViewWithTyping-Day-67_67_null_2,NEXUS_5,1.0,en].png} | 0 ...sagesViewWithTyping-Night-67_68_null_0,NEXUS_5,1.0,en].png} | 0 ...sagesViewWithTyping-Night-67_68_null_1,NEXUS_5,1.0,en].png} | 0 ...sagesViewWithTyping-Night-67_68_null_2,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_0,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_1,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_2,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_3,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_4,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_5,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_6,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_7,NEXUS_5,1.0,en].png} | 0 ...ypingNotificationView-Day-68_68_null_8,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_0,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_1,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_2,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_3,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_4,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_5,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_6,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_7,NEXUS_5,1.0,en].png} | 0 ...ingNotificationView-Night-68_69_null_8,NEXUS_5,1.0,en].png} | 0 234 files changed, 12 insertions(+) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-34_34_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-34_35_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-35_35_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-35_36_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-54_54_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-54_55_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-40_40_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-40_41_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-41_41_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-41_42_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-42_42_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-42_43_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-43_43_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-43_43_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-43_44_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-43_44_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-45_45_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-45_46_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-46_46_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-46_47_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-49_49_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-49_50_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-53_53_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-53_54_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_12,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_13,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_14,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-51_51_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-51_52_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-55_55_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-55_56_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-56_56_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-56_57_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-59_60_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-59_60_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-60_60_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-60_61_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-61_61_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-61_61_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-61_62_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-61_62_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-62_62_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-62_63_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-63_63_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-63_64_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-64_64_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-64_65_null,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_1,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_11,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-27_27_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-27_28_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-26_27_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-28_28_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-28_29_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-30_30_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-30_31_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-31_31_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-31_32_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-32_32_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-32_33_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-29_29_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-29_30_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-33_33_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-33_34_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_8,NEXUS_5,1.0,en].png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-34_34_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-34_34_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-34_35_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-34_35_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-35_35_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-35_35_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-35_36_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-35_36_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-54_54_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-54_54_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-54_55_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-54_55_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-40_40_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-40_40_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-40_41_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-40_41_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-41_41_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-41_41_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-41_42_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-41_42_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-42_42_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-42_42_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-42_43_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-42_43_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-43_43_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-43_43_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-43_43_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-43_43_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-43_44_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-43_44_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-43_44_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-43_44_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-45_45_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-45_45_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-45_46_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-45_46_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-46_46_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-46_46_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-46_47_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-46_47_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-49_49_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-49_49_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-49_50_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-49_50_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-53_53_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-53_53_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-53_54_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-53_54_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_12,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_12,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_13,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_13,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_14,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_14,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-51_51_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-51_51_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-51_52_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-51_52_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-55_55_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-55_55_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-55_56_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-55_56_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-56_56_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-56_56_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-56_57_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-56_57_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-59_60_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-59_60_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-59_60_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-59_60_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-60_60_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-60_60_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-60_61_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-60_61_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-61_61_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-61_61_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-61_61_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-61_61_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-61_62_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-61_62_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-61_62_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-61_62_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-62_62_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-62_62_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-62_63_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-62_63_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-63_63_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-63_63_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-63_64_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-63_64_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-64_64_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-64_64_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-64_65_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-64_65_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c03e811149 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0a170270406e7ba3f4d21d67536dd2866a091fd81c9474897143de98dfe6df9 +size 135600 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ab573da955 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e465ef114b738f0edbd6094cab6bb6b9704d9de9f7825e62cd0792d46d30bae +size 147050 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..bb72dcbe78 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15d9542712c4799955d2c673ceb2e927c2a24b86ac092fb98ce02bcc1bb216f3 +size 134873 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..9a6986b00c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fcf8f3cb71494b249a53f264bc3281de853da2dff07479c065c1a41bf2aff63 +size 146032 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_11,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_11,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-27_27_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-27_27_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-27_28_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-27_28_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-26_27_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-26_27_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-28_28_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-28_28_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-28_29_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-28_29_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-30_30_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-30_30_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-30_31_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-30_31_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-31_31_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-31_31_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-31_32_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-31_32_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-32_32_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-32_32_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-32_33_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-32_33_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-29_29_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-29_29_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-29_30_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-29_30_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-33_33_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-33_33_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-33_34_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-33_34_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-65_65_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-65_66_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-66_66_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-66_67_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-67_67_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-67_68_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_8,NEXUS_5,1.0,en].png From a60779a28cf70afcf26273865fb81c6daa4b4ca4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 17:47:35 +0200 Subject: [PATCH 216/289] Fix issue when retrieving Event detail. The wrong method was used. --- .../android/libraries/matrix/impl/timeline/RustTimeline.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 198f231ccb..3ec21e7560 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -517,7 +517,7 @@ class RustTimeline( private fun fetchDetailsForEvent(eventId: EventId): Result { return runCatching { - inner.getEventTimelineItemByEventId(eventId.value) + inner.fetchDetailsForEvent(eventId.value) } } } From 200b43246e91af0b1c5c31dcc7a8f0f56ca5ae28 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 17:55:31 +0200 Subject: [PATCH 217/289] Handle click on reply navigation. --- .../android/features/messages/impl/timeline/TimelineView.kt | 3 +-- .../impl/timeline/components/TimelineItemEventRow.kt | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 7f76dfe730..3483c27f85 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -108,9 +108,8 @@ fun TimelineView( accessibilityManager.isTouchExplorationEnabled.not() } - @Suppress("UNUSED_PARAMETER") fun inReplyToClicked(eventId: EventId) { - // TODO implement this logic once we have support to 'jump to event X' in sliding sync + state.eventSink(TimelineEvents.FocusOnEvent(eventId)) } // Animate alpha when timeline is first displayed, to avoid flashes or glitching when viewing rooms 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 1b9655c471..6cece86a58 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 @@ -417,7 +417,6 @@ private fun MessageSenderInformation( private fun MessageEventBubbleContent( event: TimelineItem.Event, onMessageLongClick: () -> Unit, - @Suppress("UNUSED_PARAMETER") inReplyToClick: () -> Unit, onTimestampClicked: () -> Unit, onLinkClicked: (String) -> Unit, @@ -568,8 +567,8 @@ private fun MessageEventBubbleContent( val inReplyToModifier = Modifier .padding(top = topPadding, start = 8.dp, end = 8.dp) .clip(RoundedCornerShape(6.dp)) - // FIXME when a node is clickable, its contents won't be added to the semantics tree of its parent - // .clickable(enabled = true, onClick = inReplyToClick) + // FIXME when a node is clickable, its contents won't be added to the semantics tree of its parent + .clickable(onClick = inReplyToClick) when (inReplyTo) { is InReplyToDetails.Ready -> { ReplyToContent( From 4de8713b5f5d11291d43087e2d995e1ce2a0b793 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 17:57:02 +0200 Subject: [PATCH 218/289] changelog --- changelog.d/2759.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2759.feature diff --git a/changelog.d/2759.feature b/changelog.d/2759.feature new file mode 100644 index 0000000000..bdd2c3ba77 --- /dev/null +++ b/changelog.d/2759.feature @@ -0,0 +1 @@ +Handle permalink navigation to Events. From d9c4c189afec1d389a1ee9474fa425a33d115b2b Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Mon, 29 Apr 2024 19:03:04 +0200 Subject: [PATCH 219/289] Fix dependencyAnalysis plugin (#2766) * Fix dependencyAnalysis plugin. For some reason the plugin needs to be manually applied to all the libs, otherwise running `./gradlew buildHealth` does nothing. Also, I had to add it to the convention plugins instead of using the `subprojects { ... }` approach because of the `:libraries:rustsdk` and `:libraries:textcomposer:lib` modules, which aren't proper Java/Kotlin modules. * Add some extra checks to the dependency analysis plugin --- build.gradle.kts | 3 +++ .../kotlin/io.element.android-compose-application.gradle.kts | 1 + .../main/kotlin/io.element.android-compose-library.gradle.kts | 1 + plugins/src/main/kotlin/io.element.android-library.gradle.kts | 1 + 4 files changed, 6 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 1d82d0d1a6..a0eedc8db7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -118,6 +118,9 @@ dependencyAnalysis { onUnusedDependencies { exclude("com.jakewharton.timber:timber") } + onUnusedAnnotationProcessors {} + onRedundantPlugins {} + onIncorrectConfiguration {} } } } diff --git a/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts b/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts index 80bc0f884e..2ac8fb8b72 100644 --- a/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts +++ b/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts @@ -27,6 +27,7 @@ val libs = the() plugins { id("com.android.application") id("kotlin-android") + id("com.autonomousapps.dependency-analysis") } android { diff --git a/plugins/src/main/kotlin/io.element.android-compose-library.gradle.kts b/plugins/src/main/kotlin/io.element.android-compose-library.gradle.kts index 3194505e4e..3176856339 100644 --- a/plugins/src/main/kotlin/io.element.android-compose-library.gradle.kts +++ b/plugins/src/main/kotlin/io.element.android-compose-library.gradle.kts @@ -27,6 +27,7 @@ val libs = the() plugins { id("com.android.library") id("kotlin-android") + id("com.autonomousapps.dependency-analysis") } android { diff --git a/plugins/src/main/kotlin/io.element.android-library.gradle.kts b/plugins/src/main/kotlin/io.element.android-library.gradle.kts index f3a84031e6..572168b0c4 100644 --- a/plugins/src/main/kotlin/io.element.android-library.gradle.kts +++ b/plugins/src/main/kotlin/io.element.android-library.gradle.kts @@ -25,6 +25,7 @@ val libs = the() plugins { id("com.android.library") id("kotlin-android") + id("com.autonomousapps.dependency-analysis") } android { From eaeebf9e75bcbc07cb241583b0aebd6cbc9b165a Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Mon, 29 Apr 2024 19:26:58 +0200 Subject: [PATCH 220/289] User display name overflows in timeline messages (#2767) * User display name overflows in timeline messages * Update screenshots --------- Co-authored-by: ElementBot --- changelog.d/2761.bugfix | 1 + .../android/features/messages/impl/sender/SenderName.kt | 2 ++ .../messages/impl/timeline/components/TimelineItemEventRow.kt | 1 + ...elineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png | 4 ++-- ...ll_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png | 4 ++-- ..._TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png | 4 ++-- 6 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 changelog.d/2761.bugfix diff --git a/changelog.d/2761.bugfix b/changelog.d/2761.bugfix new file mode 100644 index 0000000000..d5afb55597 --- /dev/null +++ b/changelog.d/2761.bugfix @@ -0,0 +1 @@ +User display name overflows in timeline messages when it's way too long. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderName.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderName.kt index 5142c00bdf..9daa95198e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderName.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderName.kt @@ -93,6 +93,7 @@ private fun RowScope.MainText( text = text, style = style, color = color, + maxLines = 1, overflow = TextOverflow.Ellipsis, ) } @@ -117,6 +118,7 @@ private fun RowScope.SecondaryText( text = text, style = style, color = MaterialTheme.colorScheme.secondary, + maxLines = 1, overflow = TextOverflow.Ellipsis, ) } 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 b5c60bb2af..716474de26 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 @@ -701,6 +701,7 @@ internal fun TimelineItemEventRowPreview() = ElementPreview { sequenceOf(false, true).forEach { isMine -> ATimelineItemEventRow( event = aTimelineItemEvent( + senderDisplayName = "Sender with a super long name that should ellipsize", isMine = isMine, content = aTimelineItemTextContent().copy( body = "A long text which will be displayed on several lines and" + diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png index 680eb66108..b9ae14e82a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d509d8fb7fe67e7ee2e04794608f5e4c9b1ec5ea309384ca25eaa0600416be5f -size 23064 +oid sha256:777209b58d18b92e86d4ac90cb741d477793caa84bb1b2b19a3b459675bae244 +size 18276 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png index 2d6f419f93..31c731f020 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38d438ae9245b5e7819c3f8c741f89b395956fbb357ddf7570bc457a88a36739 -size 183329 +oid sha256:6a221ada168ff38af4e6227170ed42e3765d7fdc99f410f72a30680f006cd7f7 +size 187751 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png index 84ef400fc4..b442b8d2fb 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf66a1b76b39b8055875344db3aee4a638df738cb8f6991b55f057c7da05a1be -size 180936 +oid sha256:57f411b632ea16f41e56eefbc6f37059f8053469fecfa4f5aaccc6edd467c10b +size 185075 From 906650b8d2826a891f5cc77ad9816642e9abc03f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 21:35:07 +0200 Subject: [PATCH 221/289] Fix tests after change on `InReplyTo` classes --- .../components/TimelineItemEventRow.kt | 3 +- .../impl/timeline/model/InReplyToDetails.kt | 20 +++++++--- .../timeline/model/InReplyToDetailTest.kt | 22 +++++----- .../timeline/model/InReplyToMetadataKtTest.kt | 40 +++++++++---------- 4 files changed, 45 insertions(+), 40 deletions(-) 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 6cece86a58..9633cb31bc 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 @@ -92,6 +92,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemImageContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.timeline.model.event.canBeRepliedTo +import io.element.android.features.messages.impl.timeline.model.eventId import io.element.android.features.messages.impl.timeline.model.metadata import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.colors.AvatarColorsProvider @@ -146,7 +147,7 @@ fun TimelineItemEventRow( } fun inReplyToClicked() { - val inReplyToEventId = event.inReplyTo?.eventId ?: return + val inReplyToEventId = event.inReplyTo?.eventId() ?: return inReplyToClick(inReplyToEventId) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt index 41fda8c294..5317c3231e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetails.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline.model +import androidx.compose.runtime.Immutable import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkParser @@ -27,17 +28,24 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StickerConten import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.matrix.ui.messages.toPlainText -sealed class InReplyToDetails(val eventId: EventId) { - class Ready( - eventId: EventId, +@Immutable +sealed interface InReplyToDetails { + data class Ready( + val eventId: EventId, val senderId: UserId, val senderProfile: ProfileTimelineDetails, val eventContent: EventContent?, val textContent: String?, - ) : InReplyToDetails(eventId) + ) : InReplyToDetails - class Loading(eventId: EventId) : InReplyToDetails(eventId) - class Error(eventId: EventId, val message: String) : InReplyToDetails(eventId) + data class Loading(val eventId: EventId) : InReplyToDetails + data class Error(val eventId: EventId, val message: String) : InReplyToDetails +} + +fun InReplyToDetails.eventId() = when (this) { + is InReplyToDetails.Ready -> eventId + is InReplyToDetails.Loading -> eventId + is InReplyToDetails.Error -> eventId } fun InReplyTo.map( diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt index 86355f82dc..d73f7246c9 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToDetailTest.kt @@ -32,22 +32,22 @@ import org.junit.Test class InReplyToDetailTest { @Test - fun `map - with a not ready InReplyTo does not work`() { + fun `map - with a not ready InReplyTo return expected object`() { assertThat( - InReplyTo.Pending.map( + InReplyTo.Pending(AN_EVENT_ID).map( permalinkParser = FakePermalinkParser() ) - ).isNull() + ).isEqualTo(InReplyToDetails.Loading(AN_EVENT_ID)) assertThat( InReplyTo.NotLoaded(AN_EVENT_ID).map( permalinkParser = FakePermalinkParser() ) - ).isNull() + ).isEqualTo(InReplyToDetails.Loading(AN_EVENT_ID)) assertThat( - InReplyTo.Error.map( + InReplyTo.Error(AN_EVENT_ID, "a message").map( permalinkParser = FakePermalinkParser() ) - ).isNull() + ).isEqualTo(InReplyToDetails.Error(AN_EVENT_ID, "a message")) } @Test @@ -65,7 +65,7 @@ class InReplyToDetailTest { permalinkParser = FakePermalinkParser() ) assertThat(inReplyToDetails).isNotNull() - assertThat(inReplyToDetails?.textContent).isNull() + assertThat((inReplyToDetails as InReplyToDetails.Ready).textContent).isNull() } @Test @@ -89,9 +89,7 @@ class InReplyToDetailTest { ) ) assertThat( - inReplyTo.map( - permalinkParser = FakePermalinkParser() - )?.textContent + (inReplyTo.map(permalinkParser = FakePermalinkParser()) as InReplyToDetails.Ready).textContent ).isEqualTo("Hello!") } @@ -113,9 +111,7 @@ class InReplyToDetailTest { ) ) assertThat( - inReplyTo.map( - permalinkParser = FakePermalinkParser() - )?.textContent + (inReplyTo.map(permalinkParser = FakePermalinkParser()) as InReplyToDetails.Ready).textContent ).isEqualTo("**Hello!**") } } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt index dc91de52b0..b56d871704 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/model/InReplyToMetadataKtTest.kt @@ -70,7 +70,7 @@ class InReplyToMetadataKtTest { @Test fun `any message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails(eventContent = aMessageContent()).metadata() + anInReplyToDetailsReady(eventContent = aMessageContent()).metadata() }.test { awaitItem().let { assertThat(it).isEqualTo(InReplyToMetadata.Text("textContent")) @@ -81,7 +81,7 @@ class InReplyToMetadataKtTest { @Test fun `an image message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = ImageMessageType( body = "body", @@ -111,7 +111,7 @@ class InReplyToMetadataKtTest { @Test fun `a sticker message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = StickerContent( body = "body", info = anImageInfo(), @@ -137,7 +137,7 @@ class InReplyToMetadataKtTest { @Test fun `a video message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = VideoMessageType( body = "body", @@ -167,7 +167,7 @@ class InReplyToMetadataKtTest { @Test fun `a file message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = FileMessageType( body = "body", @@ -200,7 +200,7 @@ class InReplyToMetadataKtTest { @Test fun `a audio message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = AudioMessageType( body = "body", @@ -232,7 +232,7 @@ class InReplyToMetadataKtTest { fun `a location message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { testEnv { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = LocationMessageType( body = "body", @@ -262,7 +262,7 @@ class InReplyToMetadataKtTest { fun `a voice message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { testEnv { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aMessageContent( messageType = VoiceMessageType( body = "body", @@ -292,7 +292,7 @@ class InReplyToMetadataKtTest { @Test fun `a poll content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = aPollContent() ).metadata() }.test { @@ -314,7 +314,7 @@ class InReplyToMetadataKtTest { @Test fun `redacted content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = RedactedContent ).metadata() }.test { @@ -327,7 +327,7 @@ class InReplyToMetadataKtTest { @Test fun `unable to decrypt content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = UnableToDecryptContent(UnableToDecryptContent.Data.Unknown) ).metadata() }.test { @@ -340,7 +340,7 @@ class InReplyToMetadataKtTest { @Test fun `failed to parse message content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = FailedToParseMessageLikeContent("", "") ).metadata() }.test { @@ -353,7 +353,7 @@ class InReplyToMetadataKtTest { @Test fun `failed to parse state content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = FailedToParseStateContent("", "", "") ).metadata() }.test { @@ -366,7 +366,7 @@ class InReplyToMetadataKtTest { @Test fun `profile change content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = ProfileChangeContent("", "", "", "") ).metadata() }.test { @@ -379,7 +379,7 @@ class InReplyToMetadataKtTest { @Test fun `room membership content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = RoomMembershipContent(A_USER_ID, null) ).metadata() }.test { @@ -392,7 +392,7 @@ class InReplyToMetadataKtTest { @Test fun `state content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = StateContent("", OtherState.RoomJoinRules) ).metadata() }.test { @@ -405,7 +405,7 @@ class InReplyToMetadataKtTest { @Test fun `unknown content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = UnknownContent ).metadata() }.test { @@ -418,7 +418,7 @@ class InReplyToMetadataKtTest { @Test fun `null content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { - anInReplyToDetails( + anInReplyToDetailsReady( eventContent = null ).metadata() }.test { @@ -429,13 +429,13 @@ class InReplyToMetadataKtTest { } } -fun anInReplyToDetails( +private fun anInReplyToDetailsReady( eventId: EventId = AN_EVENT_ID, senderId: UserId = A_USER_ID, senderProfile: ProfileTimelineDetails = aProfileTimelineDetails(), eventContent: EventContent? = aMessageContent(), textContent: String? = "textContent", -) = InReplyToDetails( +) = InReplyToDetails.Ready( eventId = eventId, senderId = senderId, senderProfile = senderProfile, From 7d2e3d586f267e818648b427c8da600615a60d58 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 30 Apr 2024 09:30:05 +0200 Subject: [PATCH 222/289] test for utd cause --- .../matrix/impl/analytics/UtdTrackerTest.kt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTrackerTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTrackerTest.kt index f43142900b..a05a425609 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTrackerTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/analytics/UtdTrackerTest.kt @@ -74,4 +74,29 @@ class UtdTrackerTest { assertThat(fakeAnalyticsService.screenEvents).isEmpty() assertThat(fakeAnalyticsService.trackedErrors).isEmpty() } + + @Test + fun `when onUtd is called with membership cause, the expected analytics Event is sent`() { + val fakeAnalyticsService = FakeAnalyticsService() + val sut = UtdTracker(fakeAnalyticsService) + sut.onUtd( + UnableToDecryptInfo( + eventId = AN_EVENT_ID.value, + timeToDecryptMs = 123.toULong(), + cause = UtdCause.MEMBERSHIP, + ) + ) + assertThat(fakeAnalyticsService.capturedEvents).containsExactly( + Error( + context = null, + cryptoModule = Error.CryptoModule.Rust, + cryptoSDK = Error.CryptoSDK.Rust, + timeToDecryptMillis = 123, + domain = Error.Domain.E2EE, + name = Error.Name.ExpectedDueToMembership + ) + ) + assertThat(fakeAnalyticsService.screenEvents).isEmpty() + assertThat(fakeAnalyticsService.trackedErrors).isEmpty() + } } From 937f440df7cab8c8480404ef1d6babe3ccd3ce0b Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 30 Apr 2024 09:34:02 +0200 Subject: [PATCH 223/289] Update changelog --- changelog.d/2754.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2754.feature diff --git a/changelog.d/2754.feature b/changelog.d/2754.feature new file mode 100644 index 0000000000..85880c7adc --- /dev/null +++ b/changelog.d/2754.feature @@ -0,0 +1 @@ +Add support for expected decryption errors due to membership (UX and analytics). From 80497a8b30abde15a2a74e03a428d773ef508c01 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 30 Apr 2024 09:47:20 +0200 Subject: [PATCH 224/289] Remove unnecessary parenthesis --- .../timeline/components/event/TimelineItemEncryptedView.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt index 57cf3e0ecc..b0753be9b1 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEncryptedView.kt @@ -38,9 +38,9 @@ fun TimelineItemEncryptedView( ) { val isMembershipUtd = (content.data as? UnableToDecryptContent.Data.MegolmV1AesSha2)?.utdCause == UtdCause.Membership val (textId, iconId) = if (isMembershipUtd) { - (CommonStrings.common_unable_to_decrypt_no_access to CompoundDrawables.ic_compound_block) + CommonStrings.common_unable_to_decrypt_no_access to CompoundDrawables.ic_compound_block } else { - (CommonStrings.common_waiting_for_decryption_key to CompoundDrawables.ic_compound_time) + CommonStrings.common_waiting_for_decryption_key to CompoundDrawables.ic_compound_time } TimelineItemInformativeView( text = stringResource(id = textId), From 207c4929aa366dca99dc855c23cc7ca4387ce83f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 30 Apr 2024 09:50:21 +0200 Subject: [PATCH 225/289] Cleanup --- gradle/libs.versions.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 090a65d9f4..86f3144395 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -177,7 +177,6 @@ kotlinpoet = "com.squareup:kotlinpoet:1.16.0" # Analytics posthog = "com.posthog:posthog-android:3.1.18" sentry = "io.sentry:sentry-android:7.8.0" -# Note: only 0.19.0 will compile properly # main branch can be tested replacing the version with main-SNAPSHOT matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.20.0" From 2c85d86c7a0f655a8a370979109648b713783cca Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 30 Apr 2024 09:51:29 +0200 Subject: [PATCH 226/289] Add missing preview case. --- .../model/event/TimelineItemEncryptedContentProvider.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEncryptedContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEncryptedContentProvider.kt index fafc65ac1b..5c2b059ba5 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEncryptedContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEncryptedContentProvider.kt @@ -27,7 +27,13 @@ open class TimelineItemEncryptedContentProvider : PreviewParameterProvider Date: Tue, 30 Apr 2024 08:01:47 +0000 Subject: [PATCH 227/289] Update screenshots --- ...lineItemEncryptedView-Day-36_36_null_0,NEXUS_5,1.0,en].png} | 0 ...elineItemEncryptedView-Day-36_36_null_1,NEXUS_5,1.0,en].png | 3 +++ ...elineItemEncryptedView-Day-36_36_null_2,NEXUS_5,1.0,en].png | 3 +++ ...neItemEncryptedView-Night-36_37_null_0,NEXUS_5,1.0,en].png} | 0 ...ineItemEncryptedView-Night-36_37_null_1,NEXUS_5,1.0,en].png | 3 +++ ...ineItemEncryptedView-Night-36_37_null_2,NEXUS_5,1.0,en].png | 3 +++ 6 files changed, 12 insertions(+) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_0,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_2,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_0,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f77a0b4ca9 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42816394d24d8bad66d38b97b1ffdb180b4c44ae205397d817a828e72649163b +size 11761 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..8aad553288 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b5fe193d680293c89c5faad9e74e4f887d1202f2f58ba9e145529c9d3a21fab +size 10022 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e4e6bacc09 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4364b6c6fe2d308ba89492d8444138fd85c63e378fb538351dd56237cd846a7e +size 11616 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ed6fe4f171 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80ee405fc93dfc1074e840a078b71d270058e75d7913ceeefe7883698ff8134c +size 9869 From c690b38b0fa470c95dc885e0dee2a79842f441d9 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 30 Apr 2024 11:21:39 +0200 Subject: [PATCH 228/289] Adjust typography in `SelectedUser` component (#2768) * Adjust typography in `SelectedUser` component * Set 2 max lines for `SelectedUser` component. Also update the theme token references. * Update screenshots --------- Co-authored-by: ElementBot --- changelog.d/2760.bugfix | 1 + .../libraries/matrix/ui/components/SelectedUser.kt | 14 ++++++++------ ...ddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...ddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...PeopleView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...PeopleView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...UserListView-Day-2_3_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...UserListView-Day-2_3_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...erListView-Night-2_4_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...erListView-Night-2_4_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...gureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...reRoomView-Night-3_5_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...eMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...eMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...eMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...eMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...embersView-Night-1_3_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...embersView-Night-1_3_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...embersView-Night-1_3_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...embersView-Night-1_3_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...geRolesView-Day-9_10_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...eRolesView-Day-9_10_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...geRolesView-Day-9_10_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...geRolesView-Day-9_10_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...geRolesView-Day-9_10_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...geRolesView-Day-9_10_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...geRolesView-Day-9_10_null_7,NEXUS_5,1.0,en].png | 4 ++-- ...geRolesView-Day-9_10_null_8,NEXUS_5,1.0,en].png | 4 ++-- ...geRolesView-Day-9_10_null_9,NEXUS_5,1.0,en].png | 4 ++-- ...RolesView-Night-9_11_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...olesView-Night-9_11_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...RolesView-Night-9_11_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...RolesView-Night-9_11_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...RolesView-Night-9_11_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...RolesView-Night-9_11_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...RolesView-Night-9_11_null_7,NEXUS_5,1.0,en].png | 4 ++-- ...RolesView-Night-9_11_null_8,NEXUS_5,1.0,en].png | 4 ++-- ...RolesView-Night-9_11_null_9,NEXUS_5,1.0,en].png | 4 ++-- ...erCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png | 4 ++-- ...annotRemove-Night-8_10_null,NEXUS_5,1.0,en].png | 4 ++-- ...l_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png | 4 ++-- ...SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png | 4 ++-- ...dUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png | 4 ++-- ...sersRowList-Night-9_11_null,NEXUS_5,1.0,en].png | 4 ++-- 44 files changed, 93 insertions(+), 90 deletions(-) create mode 100644 changelog.d/2760.bugfix diff --git a/changelog.d/2760.bugfix b/changelog.d/2760.bugfix new file mode 100644 index 0000000000..f74383d596 --- /dev/null +++ b/changelog.d/2760.bugfix @@ -0,0 +1 @@ +Adjust the typography used in the selected user component so a user's display name fits better. diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt index 3d9227ed46..418e2ca2ef 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt @@ -25,7 +25,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.ripple.rememberRipple -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -33,8 +32,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign 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 import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize @@ -67,13 +68,14 @@ fun SelectedUser( modifier = Modifier.clipToBounds(), text = matrixUser.getBestName(), overflow = TextOverflow.Ellipsis, - maxLines = 1, - style = MaterialTheme.typography.bodyLarge, + maxLines = 2, + style = ElementTheme.typography.fontBodyMdRegular, + textAlign = TextAlign.Center, ) } if (canRemove) { Surface( - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, modifier = Modifier .clip(CircleShape) .size(20.dp) @@ -87,7 +89,7 @@ fun SelectedUser( Icon( imageVector = CompoundIcons.Close(), contentDescription = stringResource(id = CommonStrings.action_remove), - tint = MaterialTheme.colorScheme.onPrimary, + tint = ElementTheme.colors.iconOnSolidPrimary, modifier = Modifier.padding(2.dp) ) } @@ -99,7 +101,7 @@ fun SelectedUser( @Composable internal fun SelectedUserPreview() = ElementPreview { SelectedUser( - aMatrixUser(), + aMatrixUser(displayName = "John Doe"), canRemove = true, onUserRemoved = {}, ) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en].png index 9137c7097a..64bce4f0bb 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72ef49a1eca78f466fc672b974f32e27151984d001f693f339798ba1d220f4ae -size 30295 +oid sha256:f38b34258aaeb8729838b60ba65849078e40602e2a7e8e58a64e1bc6fb2fea88 +size 29865 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en].png index b545bc4f39..3f1443ebb4 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d7f9c575314946018bcd1874080dcb3b4289dd0ff6d2bc2227a0c889ad7dc8d -size 83722 +oid sha256:e35affb35dd30ec4af59e9578a26eda8ee03e7f5b4aba102196239ea5a859d52 +size 83273 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en].png index f06cc57184..3a72941a75 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0473d3e5b0319219f5b2882f83ce0671fa280d5189415991206f69d5a53d9e0f -size 28812 +oid sha256:58d461b92f149926d2705267971c88a6c2d56c688493b360c3b0429b2e452e53 +size 28489 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en].png index d56d2df4be..c592126c01 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f538ad81c2149dd602516b816da7a13f8c2b0c7c91ecf71427086904e4592098 -size 80986 +oid sha256:e3c08a0b3926652b62acba0a8710d06399ac15fac98b23c40ff797c5de2d11f3 +size 80692 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en].png index dcbb34b53e..de0b4453fd 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:430c04eb784c1dd16811268dd1e8a9849e5fc191ca1fbea34359feb5a3872d0e -size 26229 +oid sha256:5d35a587f1bbc80a7c941ffa95b4d342bcef4bc38aad124888ef78ee08780247 +size 25870 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_6,NEXUS_5,1.0,en].png index cd136e61bd..38f7578eae 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33eb14ad0f5b9a8cd73122b87f217e76e0d0527df009bd2669643153671bd889 -size 57450 +oid sha256:46ff5bd2c47b0dc16573ce09ee993262d7d5b74e7c24a0dd811e11c1ae5f1262 +size 57054 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en].png index 70a2aa218e..9ca82980bd 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:131198fb731da1f4d8be51c9832a1acc5847a9ccd6bfe9e5c71cf05eed08e918 -size 25436 +oid sha256:30b5b2a8f215241acdc365b18e849a635962f6120f1d863572d92a09d98fbb9d +size 25076 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_6,NEXUS_5,1.0,en].png index 73a2881ea0..84b807b4c2 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e044b924c9c148788189980498c768875ca3ac4db6e048dfefa105b04586caa -size 56246 +oid sha256:737ef3ac49bd1d1115089bf58fd9056634e64f2f61e12bad271575790d02b940 +size 55869 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en].png index 4e621ccc64..4184a2f57f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86db40c2332f3eeb0a2df891574a264f4318d7de30a2b1f86b720d61398785c6 -size 84824 +oid sha256:2fe73b4f444fd4d42d99de9705ca5a73ee95cc954ab39ec874208277dac9b131 +size 84224 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en].png index 0cd3dae35a..79cf2648fa 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:76e22c3fa11d9916e8f60886cfe9d699935bf9db8b410322e4de04c69038abf8 -size 81458 +oid sha256:495521b5b0d4cb90ebd5be62975673965bd103c5bba12c43c3c6b2d6003acbfb +size 81045 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png index 7ea85a7df9..cb2a838249 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b85a1bc4512b44cdfa710dca25e186a817da9e96bc02f5933cdabc625e76926e -size 30445 +oid sha256:0ebc8308b8fde4864cc9ebfe9d9462386ee7c5e51afcb61634d0e45fc60a8063 +size 30019 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png index 4908fb5c67..774a6d75e0 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e76f387930eb2836eaeceb9cf05924915b60e0e2a57713252835ddc372ebf54e -size 27933 +oid sha256:69a3058a0d58907d53433525e789ec315e9dc812106ee092f0e19fe32693dd32 +size 27497 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png index cf96f53131..8556d2ae5c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba5a600e59b501abde572dcb380f5dbb55404863402bc9f8fde9bbcf18e1dca8 -size 46120 +oid sha256:c7017942d00ccb2793eda1b7896ef096737ab855e7aa081cd867c6dd65d99908 +size 45948 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png index 985c9ffe0e..40d9c29271 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d50c5367f08b3f91d88f450553ce15047f66833cc1c6924833948b0eef090d6c -size 40167 +oid sha256:b2e1d5fb42d42e4e12b56e386317efab47cfdb415ea7b51f6a1d0202cb20c6cb +size 40408 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png index 2d54e90d92..9efe536ad8 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80fba23f10ab9ae7f62be6357c95e0ed24bedc99ef491a5b8175eb958bcaad21 -size 28992 +oid sha256:44983e477d8dfe77ff29bc5be8bf8095639492f0b6f6448a69adb5c36fdb50b2 +size 28497 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png index 5f18c34b11..7b120462ce 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b04e83b350724ec6082775ef7d736cb95dc3d3e51311308f27f15c9f5f646e8 -size 26853 +oid sha256:20d315cdb06e0408f7da15d2c960e95a329873a6a05b52c3ea1193ba020f3b95 +size 26524 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png index bfad2cc189..563c931786 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee56607041333747b606761771e00fcd135b4d2c8e06067f30e85127300bed9b -size 45226 +oid sha256:fa100d28a0fd1d89d96ed188eb716d009e8198ccaf04d4582ac136be1bf36a4b +size 45034 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png index 8ce193e713..058ec055da 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5281dddbe8fc37a65e9c6050627f5d326f990477a48bce88fb419a9eef277245 -size 38400 +oid sha256:8d3d52c31948ffcfa1600ad755bc6183a1737b0b0ad58d47cfd2f30eaa4a8351 +size 38467 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en].png index fd7266592b..78aedba2f3 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56873f51dd8de6630f5423f796687049a920bddafb5af17a47e4f901a5d9f360 -size 71767 +oid sha256:9554fbc2927f9f0e99c47df476ad219f4664f0351635e4183a47b969a54fd9bd +size 71943 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en].png index bb978036ab..b685559fdb 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34efa87358c4529d0f67729fd417a3d52dc5a0031192dbf123bcc667d6e78391 -size 56803 +oid sha256:279658180c4402f0c85aa9c79f4ff21f31c5c3004ba6da8dca9464b95a29288e +size 55747 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en].png index 05468c5c69..e98ac0f2de 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4818ed45a985359112ee92c38148f1030647ead270727525fed1cf1f5c493180 -size 66293 +oid sha256:1ad92e642b5f93f9f80336ba89bf3f5c343ed814e48f59800747a61886b4b549 +size 65951 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en].png index 35c6953ca9..196a0e11d7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57b0cd541704cd82962e03d2173bb37350d2f91bf1f3d6121314bdccad50c8e6 -size 66255 +oid sha256:6051bfc6f14353c3591acd6d8964f973880c05d923649ec0f6941a27dd1ae008 +size 65917 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en].png index 69680bab61..bb94614fcb 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebd6484e81803758298b4ff0e19a042918d85c29e3828a561c83328a9b3e4d73 -size 60644 +oid sha256:aa991225b68802dea704202bc9bcfa01eeb28a49660d888f6a5c4a33026bffd2 +size 60445 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en].png index f5a3dad0cb..0618e2e36e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77bca4e3380c63dba4e7def0937770c6d5b1ae5bde61e4743ecde035431fb8be -size 64625 +oid sha256:8bb41968ae644485c0e3dd51f23ffee1cfabf62d2c72df9efc577545913c87fb +size 64304 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en].png index ac13b7852a..1b5a61e971 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b265ee7f4eb6c56e531004af6daae9ad89167b027d089fa960fc17553ec80131 -size 66783 +oid sha256:fd67125b3738e7d5fa88cbdcb45b08521e9cd1b2d66fcfefc2c209390dc051e4 +size 66790 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en].png index 996e749c1c..8068a3699f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb629e088198030a3a9a09c8cfc815a87e831dc6f5e26b225d17c61883585e50 -size 58902 +oid sha256:da8a5be1f5631f24966baa8d430e2a992ce5228a821c6fbf6395deb2cfcf075a +size 58490 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en].png index 0f822efc96..8827ab0ebc 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4dd6cbcd17c5c97c240a1244f3233f0f228612b317cc8f6b3f39a0d0d2b05fd -size 70120 +oid sha256:7ff20b46baf79c6e648870f9004afcc8f2fb613b9e3ab2cc4f5dd7af63a0dbb9 +size 69763 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en].png index eb5a850bea..79839472ff 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d1cf36a65fc7e916a15a0a6eab4e5eaba47f8df5d39d5cb9fe75b137138a96d -size 69609 +oid sha256:34399cf5697534a6766af2fc9cb6af1602e308548c5b6c7c20b7ad89e8c0e62d +size 69718 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en].png index c34a2b7cf5..0c8cae435c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa0b65d6cd2eac2746a2ba1598f075a6d5d144cfc62fbde8e7e17c5b69d85f1c -size 53497 +oid sha256:214c985100177029d3dad2a0a141ba4a964ea82353cb06744236108ce8ac309f +size 52409 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en].png index 37e994e196..322b845c37 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:417ca17376f6e296a8955390c800191ebdccf8b358dbc738f438b70c2568606e -size 64439 +oid sha256:28c9020725779cf02b05e7581ac91ff2cc22cc94b086d9ce825b392d8517d0d9 +size 64159 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en].png index a3490db6e3..af0a148eb9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a73ae445a25011b1c376f93b7e7203b023e23a027aa2a44d109008a1cca98406 -size 64193 +oid sha256:021f2ecc61aac6f7e856f088a7000b89ab7f757eb417b2d716f88df4f820d329 +size 63910 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en].png index 34fda705fa..12c917fb98 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a98762c06334da0cc53d04826623850b15d3fc5fdf7cdf8f50f896574a048d0d -size 58356 +oid sha256:f97240954027f0fd342c7da80e45a96d9adcfb97d5d0e13dda784fc3b0c95f87 +size 58217 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en].png index 9f39eacc46..6aa63a4433 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6a02199d5c7b5bf4ff0251d437f071e2ce54440b1e0b4519305e0080f7ed6ec -size 60375 +oid sha256:29027fe574ca4681e532b127d609e0e71a9f6095a56ee81db33dd258cbb4701b +size 60085 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en].png index 85da1ba694..de629e3ed5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5898156b9c4ce053ab24728b0679bf6d2d0873459a7b1e4951f8f9ce646e4074 -size 62587 +oid sha256:ee463af6686a4b06cdc53fd7895f987012128c8ebeadfb72b02a217c23214ea0 +size 62651 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en].png index b06975b046..b0a2e48833 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6648e7dc5c97e27efbf347380fc3ae3c67866595b086e1adefe36a274bf3afc2 -size 56314 +oid sha256:a716ef67b9c6b3873013aaa53988b1094f55c944cb82f86d508e2c6b063fc4d8 +size 55828 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en].png index cf1ca92dc6..ee7d177e3b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d984c253b4990220acebfe91d33fb7f4201fb7a976bea48b2bc04e4788ddee2 -size 67263 +oid sha256:4d3cce385286394c91dc2faea3ee0033b829d2a2fa67203c50c42c96ce19a13b +size 66971 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png index d49e59cb7e..a62f3392c9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d43c967fc2eca972c4c563afad5a3161de80424441c0853f20f27e297e421844 -size 8004 +oid sha256:09e2cd93c41c94e71e0ea3710c9e6014e64c6d7e7b52445e2d93a704fcf444f9 +size 7847 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png index f6ae863552..c1256b5e58 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:016da4bfe577460531337a6c301aa4490dcbeb22f6b3b793e0cbdd9393189403 -size 8234 +oid sha256:50096674e6cd310c3d223aca438b1f7d74ad563511ea4eea5734d011215e7889 +size 8076 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png index d36b0624f9..847c25697a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f967cfcfdc0d25779d534dd36d08783a2715aec303b9888ce3b5c9935d903755 -size 8927 +oid sha256:c31619c01740b09c1b8216450d35620fa08596d78ab860490d0c70de2a131804 +size 9064 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png index a204533361..d8dd97734e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c6bbdae568e7448cba22e9524a9d66e3e1406aacc5de88c15a0e06e9d9d0564 -size 9061 +oid sha256:7a8a8500e4034d96f9f275e08835b4c169ae53b4ef7e23b956817bb782270f94 +size 9212 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png index 75fcd4d746..164c17eac1 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4be12a6f8868fac70004572533f79a1e43bb96ce9dba45688229da74372bd3ee -size 73558 +oid sha256:ef7e8aed157d4f57e115fdbea7838b3493fdc7d35d08fefae3452457039242d3 +size 71258 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en].png index 8754d729ce..d4035e775f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5e25a638a07cb844dde029258591114cad61f2cd03596e3e2e6fe198852047d -size 72518 +oid sha256:27b29a858028600ec9be0cf37c8541b831456ec83564f657a43641289152b42a +size 70724 From 94d3d331bc65d6952c2f159f8bb103c80f8a2ac4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 12:23:36 +0000 Subject: [PATCH 229/289] Update dependency org.maplibre.gl:android-sdk to v10.3.1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5933c701da..24569f344d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -173,7 +173,7 @@ vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0" telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" } telephoto_flick = { module = "me.saket.telephoto:flick-android", version.ref = "telephoto" } statemachine = "com.freeletics.flowredux:compose:1.2.1" -maplibre = "org.maplibre.gl:android-sdk:10.3.0" +maplibre = "org.maplibre.gl:android-sdk:10.3.1" maplibre_ktx = "org.maplibre.gl:android-sdk-ktx-v7:2.0.2" maplibre_annotation = "org.maplibre.gl:android-plugin-annotation-v9:2.0.2" opusencoder = "io.element.android:opusencoder:1.1.0" From 06a519ef9814508bf2790c61ca3e791ed60a3370 Mon Sep 17 00:00:00 2001 From: Joe Groocock Date: Tue, 30 Apr 2024 15:08:04 +0100 Subject: [PATCH 230/289] Pretty-print event JSON in debug view (#2771) * Pretty-print event JSON in debug view Significantly improves readability Signed-off-by: Joe Groocock * Update screenshots Signed-off-by: Joe Groocock --------- Signed-off-by: Joe Groocock Co-authored-by: ElementBot --- changelog.d/2771.feature | 1 + .../impl/timeline/debug/EventDebugInfoView.kt | 15 +++++++++++++-- ...cryptedView-Day-37_37_null,NEXUS_5,1.0,en].png | 3 --- ...ptedView-Day-37_37_null_0,NEXUS_5,1.0,en].png} | 0 ...ptedView-Day-37_37_null_1,NEXUS_5,1.0,en].png} | 0 ...ptedView-Day-37_37_null_2,NEXUS_5,1.0,en].png} | 0 ...yptedView-Night-37_38_null,NEXUS_5,1.0,en].png | 3 --- ...edView-Night-37_38_null_0,NEXUS_5,1.0,en].png} | 0 ...edView-Night-37_38_null_1,NEXUS_5,1.0,en].png} | 0 ...edView-Night-37_38_null_2,NEXUS_5,1.0,en].png} | 0 ...bugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png | 4 ++-- ...gInfoView-Night-65_66_null,NEXUS_5,1.0,en].png | 4 ++-- 12 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 changelog.d/2771.feature delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_2,NEXUS_5,1.0,en].png} (100%) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_2,NEXUS_5,1.0,en].png} (100%) diff --git a/changelog.d/2771.feature b/changelog.d/2771.feature new file mode 100644 index 0000000000..2bda11c84c --- /dev/null +++ b/changelog.d/2771.feature @@ -0,0 +1 @@ +Pretty-print event JSON in debug viewer diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoView.kt index 5830aceb97..acff89e97c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoView.kt @@ -59,6 +59,8 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold 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.core.EventId +import org.json.JSONException +import org.json.JSONObject /** * Screen used to display debug info for events. @@ -109,18 +111,27 @@ fun EventDebugInfoView( } if (originalJson != null) { item { - CollapsibleSection(title = "Original JSON:", text = originalJson, initiallyExpanded = sectionsInitiallyExpanded) + CollapsibleSection(title = "Original JSON:", text = prettyJSON(originalJson), initiallyExpanded = sectionsInitiallyExpanded) } } if (latestEditedJson != null) { item { - CollapsibleSection(title = "Latest edited JSON:", text = latestEditedJson, initiallyExpanded = sectionsInitiallyExpanded) + CollapsibleSection(title = "Latest edited JSON:", text = prettyJSON(latestEditedJson), initiallyExpanded = sectionsInitiallyExpanded) } } } } } +private fun prettyJSON(maybeJSON: String): String { + return try { + JSONObject(maybeJSON).toString(2) + } catch (e: JSONException) { + // Prefer not pretty-printing over crashing if the data is not actually JSON + maybeJSON + } +} + @Composable private fun CollapsibleSection( title: String, diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null,NEXUS_5,1.0,en].png deleted file mode 100644 index 8aad553288..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6b5fe193d680293c89c5faad9e74e4f887d1202f2f58ba9e145529c9d3a21fab -size 10022 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null,NEXUS_5,1.0,en].png deleted file mode 100644 index ed6fe4f171..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:80ee405fc93dfc1074e840a078b71d270058e75d7913ceeefe7883698ff8134c -size 9869 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png index 5a99fb093a..7d9ee55372 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c94e99fe54698aa18a4a3ee30bb193362b12fb0c623f3e504353cc178bfdec58 -size 34906 +oid sha256:8c593dbd3d2a92933748bebe3f4e28ca3ec225777b48bd3838e6bf0b3773eae3 +size 35489 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en].png index db77e48471..3401f09015 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb484133292d510161f8b8d9e1c67325394bb837f85f37b8ac5b91e4a60d69fa -size 32838 +oid sha256:556a71042cfb952822072718d394de7236a4eee709b4a91133471567d79a19ae +size 33718 From 6d924c3ca7c451880e9bc204a4b3e79c929b3869 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 30 Apr 2024 16:08:42 +0200 Subject: [PATCH 231/289] Don't display 'join room' screen while leaving a room. (#2770) * Don't display 'join room' screen while leaving a room. Centralise the navigation based on membership in a single point in `RoomFlowNode`. * Update screenshots --------- Co-authored-by: ElementBot --- .../android/appnav/room/RoomFlowNode.kt | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index baf13dc0d3..800b7037cf 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -47,16 +47,17 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs +import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient 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.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership -import io.element.android.libraries.matrix.api.room.RoomMembershipObserver -import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import timber.log.Timber @@ -68,7 +69,6 @@ class RoomFlowNode @AssistedInject constructor( @Assisted val buildContext: BuildContext, @Assisted plugins: List, private val client: MatrixClient, - private val roomMembershipObserver: RoomMembershipObserver, private val joinRoomEntryPoint: JoinRoomEntryPoint, private val roomAliasResolverEntryPoint: RoomAliasResolverEntryPoint, private val networkMonitor: NetworkMonitor, @@ -121,14 +121,17 @@ class RoomFlowNode @AssistedInject constructor( } private fun subscribeToRoomInfoFlow(roomId: RoomId) { - client.getRoomInfoFlow( + val roomInfoFlow = client.getRoomInfoFlow( roomId = roomId - ) - .onEach { roomInfo -> - Timber.d("Room membership: ${roomInfo.map { it.currentUserMembership }}") - val info = roomInfo.getOrNull() - if (info?.currentUserMembership == CurrentUserMembership.JOINED) { - if (info.isSpace) { + ).map { it.getOrNull() } + + val isSpaceFlow = roomInfoFlow.map { it?.isSpace.orFalse() }.distinctUntilChanged() + val currentMembershipFlow = roomInfoFlow.map { it?.currentUserMembership }.distinctUntilChanged() + combine(currentMembershipFlow, isSpaceFlow) { membership, isSpace -> + Timber.d("Room membership: $membership") + when (membership) { + CurrentUserMembership.JOINED -> { + if (isSpace) { // It should not happen, but probably due to an issue in the sliding sync, // we can have a space here in case the space has just been joined. // So navigate to the JoinRoom target for now, which will @@ -137,19 +140,17 @@ class RoomFlowNode @AssistedInject constructor( } else { backstack.newRoot(NavTarget.JoinedRoom(roomId)) } - } else { + } + CurrentUserMembership.LEFT -> { + // Left the room, navigate out of this flow + navigateUp() + } + else -> { + // Was invited or the room is not known, display the join room screen backstack.newRoot(NavTarget.JoinRoom(roomId)) } } - .launchIn(lifecycleScope) - - // When leaving the room from this session only, navigate up. - roomMembershipObserver.updates - .filter { update -> update.roomId == roomId && !update.isUserInRoom } - .onEach { - navigateUp() - } - .launchIn(lifecycleScope) + }.launchIn(lifecycleScope) } override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { From 988057925a8eaf26038bc6275fbe806cc59740ca Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 30 Apr 2024 18:42:30 +0200 Subject: [PATCH 232/289] Split building the debug APK in CI (#2774) * Split building the debug APK in CI * Split building the debug APK in CI * Upload only universal APK to save time --- .github/workflows/build.yml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8093243cf0..22f9ab52c1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,8 +9,8 @@ on: # Enrich gradle.properties for CI/CD env: - GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx8g -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseParallelGC - CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 --no-daemon + GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseParallelGC + CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 jobs: debug: @@ -41,21 +41,28 @@ jobs: uses: gradle/actions/setup-gradle@v3 with: cache-read-only: ${{ github.ref != 'refs/heads/develop' }} - - name: Assemble debug APK + - name: Assemble debug Gplay APK if: ${{ matrix.variant == 'debug' }} env: ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }} ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }} ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }} - run: ./gradlew :app:assembleGplayDebug :app:assembleFDroidDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES - - name: Upload APK APKs + run: ./gradlew :app:assembleGplayDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES + - name: Assemble debug Fdroid APK + if: ${{ matrix.variant == 'debug' }} + env: + ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }} + ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }} + ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }} + run: ./gradlew app:assembleFDroidDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES + - name: Upload debug APKs if: ${{ matrix.variant == 'debug' }} uses: actions/upload-artifact@v4 with: name: elementx-debug path: | - app/build/outputs/apk/gplay/debug/*.apk - app/build/outputs/apk/fdroid/debug/*.apk + app/build/outputs/apk/gplay/debug/*-universal-debug.apk + app/build/outputs/apk/fdroid/debug/*-universal-debug.apk - uses: rnkdsh/action-upload-diawi@v1.5.5 id: diawi # Do not fail the whole build if Diawi upload fails From fd54aeb65335612ff1215966e7dc4335b6cfdb6d Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Wed, 1 May 2024 10:00:38 +0100 Subject: [PATCH 233/289] Escape paths in build_rust_sdk script --- tools/sdk/build_rust_sdk.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/sdk/build_rust_sdk.sh b/tools/sdk/build_rust_sdk.sh index 93c0150f87..dc2a74e1ff 100755 --- a/tools/sdk/build_rust_sdk.sh +++ b/tools/sdk/build_rust_sdk.sh @@ -29,11 +29,11 @@ else cd matrix-rust-sdk-$date git checkout ${rustSdkBranch} rustSdkPath=$(pwd) - cd ${elementPwd} + cd "${elementPwd}" fi -cd ${rustSdkPath} +cd "${rustSdkPath}" git status read -p "Will build with this version of the Rust SDK ^. Is it correct (yes/no) default to yes? " sdkCorrect @@ -47,7 +47,7 @@ fi read -p "Do you want to build the app after (yes/no) default to yes? " buildApp buildApp=${buildApp:-yes} -cd ${elementPwd} +cd "${elementPwd}" # If folder ../matrix-rust-components-kotlin does not exist, clone the repo if [ ! -d "../matrix-rust-components-kotlin" ]; then @@ -62,9 +62,9 @@ git checkout main git pull printf "\nBuilding the SDK for aarch64-linux-android...\n\n" -./scripts/build.sh -p ${rustSdkPath} -m sdk -t aarch64-linux-android -o ${elementPwd}/libraries/rustsdk +./scripts/build.sh -p "${rustSdkPath}" -m sdk -t aarch64-linux-android -o "${elementPwd}/libraries/rustsdk" -cd ${elementPwd} +cd "${elementPwd}" mv ./libraries/rustsdk/sdk-android-debug.aar ./libraries/rustsdk/matrix-rust-sdk.aar mkdir -p ./libraries/rustsdk/sdks cp ./libraries/rustsdk/matrix-rust-sdk.aar ./libraries/rustsdk/sdks/matrix-rust-sdk-${date}.aar From 528e7b390b12e7dfcb44b15064a50b9be0232671 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 1 May 2024 12:58:17 +0200 Subject: [PATCH 234/289] Remove the FtueEntryPoint.Callback, LoggedInFlowNode is already observing the Ftue state to change the root target. --- .../kotlin/io/element/android/appnav/LoggedInFlowNode.kt | 5 ----- .../io/element/android/features/ftue/api/FtueEntryPoint.kt | 6 ------ .../android/features/ftue/impl/DefaultFtueEntryPoint.kt | 5 ----- .../io/element/android/features/ftue/impl/FtueFlowNode.kt | 5 +---- 4 files changed, 1 insertion(+), 20 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index ecff658963..5ba37a79d6 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -345,11 +345,6 @@ class LoggedInFlowNode @AssistedInject constructor( } NavTarget.Ftue -> { ftueEntryPoint.nodeBuilder(this, buildContext) - .callback(object : FtueEntryPoint.Callback { - override fun onFtueFlowFinished() { - lifecycleScope.launch { attachRoomList() } - } - }) .build() } NavTarget.RoomDirectorySearch -> { diff --git a/features/ftue/api/src/main/kotlin/io/element/android/features/ftue/api/FtueEntryPoint.kt b/features/ftue/api/src/main/kotlin/io/element/android/features/ftue/api/FtueEntryPoint.kt index 186f2fe026..f3ad0b64a9 100644 --- a/features/ftue/api/src/main/kotlin/io/element/android/features/ftue/api/FtueEntryPoint.kt +++ b/features/ftue/api/src/main/kotlin/io/element/android/features/ftue/api/FtueEntryPoint.kt @@ -18,18 +18,12 @@ package io.element.android.features.ftue.api import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.bumble.appyx.core.plugin.Plugin import io.element.android.libraries.architecture.FeatureEntryPoint interface FtueEntryPoint : FeatureEntryPoint { fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder interface NodeBuilder { - fun callback(callback: Callback): NodeBuilder fun build(): Node } - - interface Callback : Plugin { - fun onFtueFlowFinished() - } } diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt index c89b1840af..0b089c3df9 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt @@ -31,11 +31,6 @@ class DefaultFtueEntryPoint @Inject constructor() : FtueEntryPoint { val plugins = ArrayList() return object : FtueEntryPoint.NodeBuilder { - override fun callback(callback: FtueEntryPoint.Callback): FtueEntryPoint.NodeBuilder { - plugins += callback - return this - } - override fun build(): Node { return parentNode.createNode(buildContext, plugins) } diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt index 3616faf2ae..772343ea58 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt @@ -32,7 +32,6 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.analytics.api.AnalyticsEntryPoint -import io.element.android.features.ftue.api.FtueEntryPoint import io.element.android.features.ftue.impl.notifications.NotificationsOptInNode import io.element.android.features.ftue.impl.sessionverification.FtueSessionVerificationFlowNode import io.element.android.features.ftue.impl.state.DefaultFtueService @@ -86,8 +85,6 @@ class FtueFlowNode @AssistedInject constructor( data object LockScreenSetup : NavTarget } - private val callback = plugins.filterIsInstance().firstOrNull() - override fun onBuilt() { super.onBuilt() @@ -157,7 +154,7 @@ class FtueFlowNode @AssistedInject constructor( FtueStep.LockscreenSetup -> { backstack.newRoot(NavTarget.LockScreenSetup) } - null -> callback?.onFtueFlowFinished() + null -> Unit } } From b05fa82dfc36a089c9ca1ef0252bdeb8be0bdf3b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 1 May 2024 12:47:48 +0200 Subject: [PATCH 235/289] Rename val for clarity. --- .../main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 5ba37a79d6..9d176321ca 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -386,9 +386,9 @@ class LoggedInFlowNode @AssistedInject constructor( override fun View(modifier: Modifier) { Box(modifier = modifier) { val lockScreenState by lockScreenStateService.lockState.collectAsState() - val isFtueDisplayed by ftueService.state.collectAsState() + val ftueState by ftueService.state.collectAsState() BackstackView() - if (isFtueDisplayed is FtueState.Complete) { + if (ftueState is FtueState.Complete) { PermanentChild(permanentNavModel = permanentNavModel, navTarget = NavTarget.LoggedInPermanent) } if (lockScreenState == LockScreenLockState.Locked) { From 83506e51913899a775475214f63f3bee0ec059df Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 1 May 2024 13:50:34 +0200 Subject: [PATCH 236/289] Fix navigation issue #2778 --- .../android/appnav/LoggedInFlowNode.kt | 18 ++++------------ .../io/element/android/appnav/RootFlowNode.kt | 2 +- .../libraries/architecture/ParentNodeExt.kt | 21 +++++++++++++++++++ 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 9d176321ca..fed9649c85 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -35,7 +35,6 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.replace -import com.bumble.appyx.navmodel.backstack.operation.singleTop import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode @@ -60,6 +59,7 @@ import io.element.android.features.securebackup.api.SecureBackupEntryPoint import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode +import io.element.android.libraries.architecture.waitForNavTargetAttached import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.SessionScope @@ -363,25 +363,15 @@ class LoggedInFlowNode @AssistedInject constructor( } } - suspend fun attachRoomList() { - if (!canShowRoomList()) return - attachChild { - backstack.singleTop(NavTarget.RoomList) - } - } - suspend fun attachRoom(roomId: RoomId) { - if (!canShowRoomList()) return + waitForNavTargetAttached { navTarget -> + navTarget is NavTarget.RoomList + } attachChild { - backstack.singleTop(NavTarget.RoomList) backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias())) } } - private fun canShowRoomList(): Boolean { - return ftueService.state.value is FtueState.Complete - } - @Composable override fun View(modifier: Modifier) { Box(modifier = modifier) { diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index a3cbfb7d77..7f06f2833b 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -288,7 +288,7 @@ class RootFlowNode @AssistedInject constructor( .attachSession() .apply { when (deeplinkData) { - is DeeplinkData.Root -> attachRoomList() + is DeeplinkData.Root -> Unit // The room list will always be shown, observing FtueState is DeeplinkData.Room -> attachRoom(deeplinkData.roomId) } } diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/ParentNodeExt.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/ParentNodeExt.kt index c03ff64f6c..4ddd8c78a4 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/ParentNodeExt.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/ParentNodeExt.kt @@ -20,6 +20,7 @@ import androidx.lifecycle.lifecycleScope import com.bumble.appyx.core.children.nodeOrNull import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.ParentNode +import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kotlinx.coroutines.suspendCancellableCoroutine import kotlin.coroutines.resume @@ -48,3 +49,23 @@ suspend inline fun ParentNode.wai continuation.cancel() } } + +/** + * Wait for a child to be attached to the parent node, only using the NavTarget + */ +suspend inline fun ParentNode.waitForNavTargetAttached(crossinline predicate: (NavTarget) -> Boolean) = + suspendCancellableCoroutine { continuation -> + lifecycleScope.launch { + children.collect { childMap -> + val node = childMap.entries + .map { it.key.navTarget } + .lastOrNull(predicate) + if (node != null && !continuation.isCompleted) { + continuation.resume(Unit) + cancel() + } + } + }.invokeOnCompletion { + continuation.cancel() + } + } From 17913878b1150425dc84d9c3550d285839ecf7d4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 1 May 2024 14:02:10 +0200 Subject: [PATCH 237/289] Changelog --- changelog.d/2778.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2778.bugfix diff --git a/changelog.d/2778.bugfix b/changelog.d/2778.bugfix new file mode 100644 index 0000000000..9353dda39f --- /dev/null +++ b/changelog.d/2778.bugfix @@ -0,0 +1 @@ +Ensure the application open the room when a notification is clicked. From f807d578fabb493ab70f1ac40a1cc6bc5e690c15 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 1 May 2024 19:35:16 +0200 Subject: [PATCH 238/289] Period --- .../io/element/android/libraries/architecture/ParentNodeExt.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/ParentNodeExt.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/ParentNodeExt.kt index 4ddd8c78a4..be68c4671e 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/ParentNodeExt.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/ParentNodeExt.kt @@ -51,7 +51,7 @@ suspend inline fun ParentNode.wai } /** - * Wait for a child to be attached to the parent node, only using the NavTarget + * Wait for a child to be attached to the parent node, only using the NavTarget. */ suspend inline fun ParentNode.waitForNavTargetAttached(crossinline predicate: (NavTarget) -> Boolean) = suspendCancellableCoroutine { continuation -> From 62976eef443e793477f63f89fab6969770bcc23a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 09:39:44 +0200 Subject: [PATCH 239/289] Update dependency androidx.compose.compiler:compiler to v1.5.13 (#2783) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5933c701da..1b39154f93 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ media3 = "1.3.1" # Compose compose_bom = "2024.04.01" -composecompiler = "1.5.12" +composecompiler = "1.5.13" # Coroutines coroutines = "1.8.0" From 82621d952cb9fda60bd519e263f3be16863c9852 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 10:59:29 +0200 Subject: [PATCH 240/289] Update dependency androidx.compose:compose-bom to v2024.05.00 (#2786) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1b39154f93..9e38498911 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ activity = "1.8.2" media3 = "1.3.1" # Compose -compose_bom = "2024.04.01" +compose_bom = "2024.05.00" composecompiler = "1.5.13" # Coroutines From 1fab0736200999f00928943ea890b5cc9799a308 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 09:00:40 +0000 Subject: [PATCH 241/289] Update dependency androidx.webkit:webkit to v1.11.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e38498911..a032e53d2b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -96,7 +96,7 @@ androidx_activity_activity = { module = "androidx.activity:activity", version.re androidx_activity_compose = { module = "androidx.activity:activity-compose", version.ref = "activity" } androidx_startup = "androidx.startup:startup-runtime:1.1.1" androidx_preference = "androidx.preference:preference:1.2.1" -androidx_webkit = "androidx.webkit:webkit:1.10.0" +androidx_webkit = "androidx.webkit:webkit:1.11.0" androidx_compose_bom = { module = "androidx.compose:compose-bom", version.ref = "compose_bom" } androidx_compose_material3 = "androidx.compose.material3:material3:1.2.1" From 0476bd95c8e2bef8df549c4d3104229496ffb4d8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 1 May 2024 10:15:54 +0200 Subject: [PATCH 242/289] Open user profile and room with event from permalink --- app/src/main/AndroidManifest.xml | 29 +++ .../android/appnav/LoggedInFlowNode.kt | 52 +++- .../io/element/android/appnav/RootFlowNode.kt | 31 ++- .../android/appnav/intent/IntentResolver.kt | 16 +- .../appnav/intent/IntentResolverTest.kt | 6 + .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-be/translations.xml | 3 +- .../src/main/res/values-cs/translations.xml | 3 +- .../src/main/res/values-de/translations.xml | 3 +- .../src/main/res/values-fr/translations.xml | 3 +- .../src/main/res/values-hu/translations.xml | 3 +- .../src/main/res/values-in/translations.xml | 2 - .../src/main/res/values-ru/translations.xml | 2 - .../src/main/res/values-sk/translations.xml | 3 +- .../impl/src/main/res/values/localazy.xml | 3 +- .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-sv/translations.xml | 8 + .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-sv/translations.xml | 7 + .../src/main/res/values-sv/translations.xml | 2 + features/roomdetails/impl/build.gradle.kts | 1 + .../roomdetails/impl/RoomDetailsFlowNode.kt | 7 +- .../roomdetails/impl/RoomDetailsState.kt | 4 +- .../impl/RoomDetailsStateProvider.kt | 8 +- .../roomdetails/impl/RoomDetailsView.kt | 14 +- .../members/details/RoomMemberDetailsNode.kt | 33 +-- .../details/RoomMemberDetailsPresenter.kt | 55 ++-- .../src/main/res/values-be/translations.xml | 7 - .../src/main/res/values-bg/translations.xml | 4 - .../src/main/res/values-cs/translations.xml | 7 - .../src/main/res/values-de/translations.xml | 17 +- .../src/main/res/values-es/translations.xml | 7 - .../src/main/res/values-fr/translations.xml | 7 - .../src/main/res/values-hu/translations.xml | 7 - .../src/main/res/values-in/translations.xml | 7 - .../src/main/res/values-it/translations.xml | 7 - .../src/main/res/values-ro/translations.xml | 7 - .../src/main/res/values-ru/translations.xml | 7 - .../src/main/res/values-sk/translations.xml | 7 - .../src/main/res/values-sv/translations.xml | 7 - .../src/main/res/values-uk/translations.xml | 7 - .../main/res/values-zh-rTW/translations.xml | 4 - .../impl/src/main/res/values/localazy.xml | 7 - .../RoomMemberDetailsPresenterTests.kt | 36 +-- .../src/main/res/values-sv/translations.xml | 2 + .../main/res/values-zh-rTW/translations.xml | 2 + .../src/main/res/values-de/translations.xml | 15 +- .../src/main/res/values-sv/translations.xml | 3 + features/userprofile/api/build.gradle.kts | 29 +++ .../userprofile/api/UserProfileEntryPoint.kt | 41 +++ features/userprofile/impl/build.gradle.kts | 69 +++++ .../impl/DefaultUserProfileEntryPoint.kt | 49 ++++ .../userprofile/impl/UserProfileFlowNode.kt | 106 ++++++++ .../userprofile/impl/di/UserProfileModule.kt | 42 ++++ .../userprofile/impl/root/UserProfileNode.kt | 96 +++++++ .../impl/root/UserProfilePresenter.kt | 124 +++++++++ .../impl/UserProfilePresenterTests.kt | 238 ++++++++++++++++++ features/userprofile/shared/build.gradle.kts | 71 ++++++ .../userprofile/shared/UserProfileEvents.kt} | 18 +- .../shared/UserProfileHeaderSection.kt} | 13 +- .../shared/UserProfileMainActionsSection.kt} | 6 +- .../shared/UserProfileNodeHelper.kt | 53 ++++ .../shared/UserProfilePresenterHelper.kt | 53 ++++ .../userprofile/shared/UserProfileState.kt} | 11 +- .../shared/UserProfileStateProvider.kt} | 33 +-- .../userprofile/shared/UserProfileView.kt} | 49 ++-- .../shared}/avatar/AvatarPreviewNode.kt | 8 +- .../shared}/blockuser/BlockUserDialogs.kt | 24 +- .../shared}/blockuser/BlockUserSection.kt | 34 +-- .../src/main/res/values-be/translations.xml | 10 + .../src/main/res/values-bg/translations.xml | 7 + .../src/main/res/values-cs/translations.xml | 10 + .../src/main/res/values-de/translations.xml | 10 + .../src/main/res/values-es/translations.xml | 10 + .../src/main/res/values-fr/translations.xml | 10 + .../src/main/res/values-hu/translations.xml | 10 + .../src/main/res/values-it/translations.xml | 10 + .../src/main/res/values-ro/translations.xml | 10 + .../src/main/res/values-ru/translations.xml | 10 + .../src/main/res/values-sk/translations.xml | 10 + .../src/main/res/values-sv/translations.xml | 10 + .../src/main/res/values-uk/translations.xml | 10 + .../main/res/values-zh-rTW/translations.xml | 7 + .../shared/src/main/res/values/localazy.xml | 10 + .../shared}/blockuser/BlockUserDialogsTest.kt | 42 ++-- .../src/main/res/values-sv/translations.xml | 1 + .../main/res/values-zh-rTW/translations.xml | 8 +- .../src/main/res/values-fr/translations.xml | 2 +- .../src/main/res/values-cs/translations.xml | 1 + .../src/main/res/values-de/translations.xml | 9 +- .../src/main/res/values-hu/translations.xml | 1 + .../src/main/res/values-sv/translations.xml | 7 + tools/localazy/config.json | 9 +- 93 files changed, 1499 insertions(+), 370 deletions(-) create mode 100644 features/userprofile/api/build.gradle.kts create mode 100644 features/userprofile/api/src/main/kotlin/io/element/android/features/userprofile/api/UserProfileEntryPoint.kt create mode 100644 features/userprofile/impl/build.gradle.kts create mode 100644 features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt create mode 100644 features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt create mode 100644 features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/di/UserProfileModule.kt create mode 100644 features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt create mode 100644 features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt create mode 100644 features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/UserProfilePresenterTests.kt create mode 100644 features/userprofile/shared/build.gradle.kts rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsEvents.kt => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileEvents.kt} (61%) rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberHeaderSection.kt => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt} (89%) rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberMainActionsSection.kt => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt} (87%) create mode 100644 features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileNodeHelper.kt create mode 100644 features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfilePresenterHelper.kt rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsState.kt => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileState.kt} (80%) rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsStateProvider.kt => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileStateProvider.kt} (57%) rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsView.kt => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileView.kt} (75%) rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared}/avatar/AvatarPreviewNode.kt (85%) rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared}/blockuser/BlockUserDialogs.kt (73%) rename features/{roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl => userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared}/blockuser/BlockUserSection.kt (77%) create mode 100644 features/userprofile/shared/src/main/res/values-be/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-bg/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-cs/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-de/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-es/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-fr/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-hu/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-it/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-ro/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-ru/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-sk/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-sv/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-uk/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values-zh-rTW/translations.xml create mode 100644 features/userprofile/shared/src/main/res/values/localazy.xml rename features/{roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl => userprofile/shared/src/test/kotlin/io/element/android/features/userprofile/shared}/blockuser/BlockUserDialogsTest.kt (58%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 10300ae00b..ab2d565b3f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,35 @@ + + + + + + + + + + + + + + + + + + + + + { - // FIXME Add a user profile screen. - Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") + // Should not happen (handled by MessagesNode) + Timber.e("User link clicked: ${data.userId}.") } is PermalinkData.RoomLink -> { backstack.push( @@ -306,6 +315,17 @@ class LoggedInFlowNode @AssistedInject constructor( ) createNode(buildContext, plugins = listOf(inputs, callback)) } + is NavTarget.UserProfile -> { + val callback = object : UserProfileEntryPoint.Callback { + override fun onOpenRoom(roomId: RoomId) { + backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias())) + } + } + userProfileEntryPoint.nodeBuilder(this, buildContext) + .params(UserProfileEntryPoint.Params(userId = navTarget.userId)) + .callback(callback) + .build() + } is NavTarget.Settings -> { val callback = object : PreferencesEntryPoint.Callback { override fun onOpenBugReport() { @@ -321,7 +341,7 @@ class LoggedInFlowNode @AssistedInject constructor( } } val inputs = PreferencesEntryPoint.Params(navTarget.initialElement) - return preferencesEntryPoint.nodeBuilder(this, buildContext) + preferencesEntryPoint.nodeBuilder(this, buildContext) .params(inputs) .callback(callback) .build() @@ -363,12 +383,32 @@ class LoggedInFlowNode @AssistedInject constructor( } } - suspend fun attachRoom(roomId: RoomId) { + suspend fun attachRoom(roomIdOrAlias: RoomIdOrAlias, eventId: EventId? = null) { waitForNavTargetAttached { navTarget -> navTarget is NavTarget.RoomList } attachChild { - backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias())) + backstack.push( + NavTarget.Room( + roomIdOrAlias = roomIdOrAlias, + initialElement = RoomNavigationTarget.Messages( + focusedEventId = eventId + ) + ) + ) + } + } + + suspend fun attachUser(userId: UserId) { + waitForNavTargetAttached { navTarget -> + navTarget is NavTarget.RoomList + } + attachChild { + backstack.push( + NavTarget.UserProfile( + userId = userId, + ) + ) } } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index 7f06f2833b..78f9943843 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -55,6 +55,8 @@ import io.element.android.libraries.designsystem.theme.components.CircularProgre import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias +import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.sessionstorage.api.LoggedInState import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn @@ -279,9 +281,31 @@ class RootFlowNode @AssistedInject constructor( when (resolvedIntent) { is ResolvedIntent.Navigation -> navigateTo(resolvedIntent.deeplinkData) is ResolvedIntent.Oidc -> onOidcAction(resolvedIntent.oidcAction) + is ResolvedIntent.Permalink -> navigateTo(resolvedIntent.permalinkData) } } + private suspend fun navigateTo(permalinkData: PermalinkData) { + Timber.d("Navigating to $permalinkData") + attachSession(null) + .attachSession() + .apply { + when (permalinkData) { + is PermalinkData.FallbackLink -> Unit + is PermalinkData.RoomEmailInviteLink -> Unit + is PermalinkData.RoomLink -> { + attachRoom( + roomIdOrAlias = permalinkData.roomIdOrAlias, + eventId = permalinkData.eventId, + ) + } + is PermalinkData.UserLink -> { + attachUser(permalinkData.userId) + } + } + } + } + private suspend fun navigateTo(deeplinkData: DeeplinkData) { Timber.d("Navigating to $deeplinkData") attachSession(deeplinkData.sessionId) @@ -289,7 +313,7 @@ class RootFlowNode @AssistedInject constructor( .apply { when (deeplinkData) { is DeeplinkData.Root -> Unit // The room list will always be shown, observing FtueState - is DeeplinkData.Room -> attachRoom(deeplinkData.roomId) + is DeeplinkData.Room -> attachRoom(deeplinkData.roomId.toRoomIdOrAlias()) } } } @@ -298,10 +322,11 @@ class RootFlowNode @AssistedInject constructor( oidcActionFlow.post(oidcAction) } - private suspend fun attachSession(sessionId: SessionId): LoggedInAppScopeFlowNode { + // [sessionId] will be null for permalink. + private suspend fun attachSession(sessionId: SessionId?): LoggedInAppScopeFlowNode { // TODO handle multi-session return waitForChildAttached { navTarget -> - navTarget is NavTarget.LoggedInFlow && navTarget.sessionId == sessionId + navTarget is NavTarget.LoggedInFlow && (sessionId == null || navTarget.sessionId == sessionId) } } } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt b/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt index 96febc3751..dafbf8c283 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt @@ -21,27 +21,41 @@ import io.element.android.features.login.api.oidc.OidcAction import io.element.android.features.login.api.oidc.OidcIntentResolver import io.element.android.libraries.deeplink.DeeplinkData import io.element.android.libraries.deeplink.DeeplinkParser +import io.element.android.libraries.matrix.api.permalink.PermalinkData +import io.element.android.libraries.matrix.api.permalink.PermalinkParser import timber.log.Timber import javax.inject.Inject sealed interface ResolvedIntent { data class Navigation(val deeplinkData: DeeplinkData) : ResolvedIntent data class Oidc(val oidcAction: OidcAction) : ResolvedIntent + data class Permalink(val permalinkData: PermalinkData) : ResolvedIntent } class IntentResolver @Inject constructor( private val deeplinkParser: DeeplinkParser, - private val oidcIntentResolver: OidcIntentResolver + private val oidcIntentResolver: OidcIntentResolver, + private val permalinkParser: PermalinkParser, ) { fun resolve(intent: Intent): ResolvedIntent? { if (intent.canBeIgnored()) return null + // Coming from a notification? val deepLinkData = deeplinkParser.getFromIntent(intent) if (deepLinkData != null) return ResolvedIntent.Navigation(deepLinkData) + // Coming during login using Oidc? val oidcAction = oidcIntentResolver.resolve(intent) if (oidcAction != null) return ResolvedIntent.Oidc(oidcAction) + // External link clicked? (matrix.to, element.io, etc.) + val permalinkData = intent + .takeIf { it.action == Intent.ACTION_VIEW } + ?.dataString + ?.let { permalinkParser.parse(it) } + ?.takeIf { it !is PermalinkData.FallbackLink } + if (permalinkData != null) return ResolvedIntent.Permalink(permalinkData) + // Unknown intent Timber.w("Unknown intent") return null diff --git a/appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt index 3ad11787df..fa588410dc 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt @@ -18,6 +18,7 @@ package io.element.android.appnav.intent import android.app.Activity import android.content.Intent +import android.net.Uri import androidx.core.net.toUri import com.google.common.truth.Truth.assertThat import io.element.android.features.login.api.oidc.OidcAction @@ -26,9 +27,11 @@ import io.element.android.features.login.impl.oidc.OidcUrlParser import io.element.android.libraries.deeplink.DeepLinkCreator import io.element.android.libraries.deeplink.DeeplinkData import io.element.android.libraries.deeplink.DeeplinkParser +import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_SESSION_ID import io.element.android.libraries.matrix.test.A_THREAD_ID +import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser import org.junit.Assert.assertThrows import org.junit.Test import org.junit.runner.RunWith @@ -179,6 +182,9 @@ class IntentResolverTest { oidcIntentResolver = DefaultOidcIntentResolver( oidcUrlParser = OidcUrlParser() ), + permalinkParser = FakePermalinkParser( + result = { PermalinkData.FallbackLink(Uri.parse("https://matrix.org")) } + ), ) } } diff --git a/features/createroom/impl/src/main/res/values-de/translations.xml b/features/createroom/impl/src/main/res/values-de/translations.xml index 6c77a2ad28..441f747e7e 100644 --- a/features/createroom/impl/src/main/res/values-de/translations.xml +++ b/features/createroom/impl/src/main/res/values-de/translations.xml @@ -7,7 +7,7 @@ "Privater Raum (nur auf Einladung)" "Die Nachrichten sind nicht verschlüsselt und können von jedem gelesen werden. Die Verschlüsselung kann zu einem späteren Zeitpunkt aktiviert werden." "Öffentlicher Raum (für alle)" - "Raum-Name" + "Raumname" "Raum erstellen" "Thema (optional)" "Beim Versuch, einen Chat zu starten, ist ein Fehler aufgetreten" diff --git a/features/ftue/impl/src/main/res/values-be/translations.xml b/features/ftue/impl/src/main/res/values-be/translations.xml index 768a5db68a..e9666b57e3 100644 --- a/features/ftue/impl/src/main/res/values-be/translations.xml +++ b/features/ftue/impl/src/main/res/values-be/translations.xml @@ -15,8 +15,7 @@ "Націсніце на свой аватар" "Выберыце %1$s" "“Звязаць новую прыладу”" - "Выберыце %1$s" - "“Паказаць QR-код”" + "Выконвайце паказаныя інструкцыі" "Адкрыйце %1$s на іншай прыладзе, каб атрымаць QR-код" "Выкарыстоўвайце QR-код, паказаны на іншай прыладзе." "Паўтарыць спробу" diff --git a/features/ftue/impl/src/main/res/values-cs/translations.xml b/features/ftue/impl/src/main/res/values-cs/translations.xml index 17456a5eca..b6c0efa729 100644 --- a/features/ftue/impl/src/main/res/values-cs/translations.xml +++ b/features/ftue/impl/src/main/res/values-cs/translations.xml @@ -15,8 +15,7 @@ "Klikněte na svůj avatar" "Vybrat %1$s" "\"Připojit nové zařízení\"" - "Vybrat %1$s" - "\"Zobrazit QR kód\"" + "Postupujte podle uvedených pokynů" "Otevřete %1$s na jiném zařízení pro získání QR kódu" "Použijte QR kód zobrazený na druhém zařízení." "Zkusit znovu" diff --git a/features/ftue/impl/src/main/res/values-de/translations.xml b/features/ftue/impl/src/main/res/values-de/translations.xml index 93ebf87261..4640cf119c 100644 --- a/features/ftue/impl/src/main/res/values-de/translations.xml +++ b/features/ftue/impl/src/main/res/values-de/translations.xml @@ -15,8 +15,7 @@ "Klick auf deinen Avatar" "Wähle %1$s" "\"Neues Gerät verknüpfen\"" - "Wähle %1$s" - "\"QR-Code anzeigen\"" + "Befolge die angezeigten Anweisungen" "Öffne %1$s auf einem anderen Gerät, um den QR-Code zu erhalten" "Verwende den QR-Code, der auf dem anderen Gerät angezeigt wird." "Erneut versuchen" diff --git a/features/ftue/impl/src/main/res/values-fr/translations.xml b/features/ftue/impl/src/main/res/values-fr/translations.xml index 8caf493584..a5e4caedfc 100644 --- a/features/ftue/impl/src/main/res/values-fr/translations.xml +++ b/features/ftue/impl/src/main/res/values-fr/translations.xml @@ -7,8 +7,7 @@ "Cliquez sur votre image de profil" "Choisissez %1$s" "“Associer une nouvelle session”" - "Choisissez %1$s" - "“Afficher le QR code”" + "Suivez les instructions affichées" "Ouvrez %1$s sur un autre appareil pour obtenir le QR code" "Scannez le QR code affiché sur l’autre appareil." "Essayer à nouveau" diff --git a/features/ftue/impl/src/main/res/values-hu/translations.xml b/features/ftue/impl/src/main/res/values-hu/translations.xml index 2fce86ebbb..e5c11f0c2b 100644 --- a/features/ftue/impl/src/main/res/values-hu/translations.xml +++ b/features/ftue/impl/src/main/res/values-hu/translations.xml @@ -15,8 +15,7 @@ "Kattintson a profilképére" "Válassza ezt: %1$s" "„Új eszköz összekapcsolása”" - "Válassza ezt: %1$s" - "„QR-kód megjelenítése”" + "Kövesse a látható utasításokat" "Nyissa meg az %1$set egy másik eszközön a QR-kód lekéréséhez." "Használja a másik eszközön látható QR-kódot." "Próbálja újra" diff --git a/features/ftue/impl/src/main/res/values-in/translations.xml b/features/ftue/impl/src/main/res/values-in/translations.xml index 0150e54251..c99839166b 100644 --- a/features/ftue/impl/src/main/res/values-in/translations.xml +++ b/features/ftue/impl/src/main/res/values-in/translations.xml @@ -15,8 +15,6 @@ "Klik pada avatar Anda" "Pilih %1$s" "“Tautkan perangkat baru”" - "Pilih %1$s" - "“Tampilkan kode QR”" "Buka %1$s di perangkat lain untuk mendapatkan kode QR" "Gunakan kode QR yang ditampilkan di perangkat lain." "Coba lagi" diff --git a/features/ftue/impl/src/main/res/values-ru/translations.xml b/features/ftue/impl/src/main/res/values-ru/translations.xml index ca34ccf26d..3fe5ceefc2 100644 --- a/features/ftue/impl/src/main/res/values-ru/translations.xml +++ b/features/ftue/impl/src/main/res/values-ru/translations.xml @@ -15,8 +15,6 @@ "Нажмите на свое изображение" "Выбрать %1$s" "\"Привязать новое устройство\"" - "Выбрать %1$s" - "\"Показать QR-код\"" "Откройте %1$s на другом устройстве, чтобы получить QR-код" "Используйте QR-код, показанный на другом устройстве." "Повторить попытку" diff --git a/features/ftue/impl/src/main/res/values-sk/translations.xml b/features/ftue/impl/src/main/res/values-sk/translations.xml index cf184f6ddc..593fe78182 100644 --- a/features/ftue/impl/src/main/res/values-sk/translations.xml +++ b/features/ftue/impl/src/main/res/values-sk/translations.xml @@ -15,8 +15,7 @@ "Kliknite na svoj obrázok" "Vyberte %1$s" "„Prepojiť nové zariadenie“" - "Vyberte %1$s" - "„Zobraziť QR kód“" + "Postupujte podľa zobrazených pokynov" "Ak chcete získať QR kód, otvorte %1$s na inom zariadení" "Použite QR kód zobrazený na druhom zariadení." "Skúste to znova" diff --git a/features/ftue/impl/src/main/res/values/localazy.xml b/features/ftue/impl/src/main/res/values/localazy.xml index 73db47aa81..9264bfd4b1 100644 --- a/features/ftue/impl/src/main/res/values/localazy.xml +++ b/features/ftue/impl/src/main/res/values/localazy.xml @@ -15,8 +15,7 @@ "Click on your avatar" "Select %1$s" "“Link new device”" - "Select %1$s" - "“Show QR code”" + "Follow the instructions shown" "Open %1$s on another device to get the QR code" "Use the QR code shown on the other device." "Try again" diff --git a/features/lockscreen/impl/src/main/res/values-de/translations.xml b/features/lockscreen/impl/src/main/res/values-de/translations.xml index c24e9744c4..53df8aeca0 100644 --- a/features/lockscreen/impl/src/main/res/values-de/translations.xml +++ b/features/lockscreen/impl/src/main/res/values-de/translations.xml @@ -16,7 +16,7 @@ "PIN bestätigen" "Aus Sicherheitsgründen kann dieser PIN-Code nicht verwendet werden." "Bitte eine andere PIN verwenden." - "Sperre %1$s mit einem PIN Code, um den Zugriff auf Deine Chats zu beschränken. + "Sperre %1$s mit einem PIN Code, um den Zugriff auf deine Chats zu beschränken. Wähle etwas Einprägsames. Bei falscher Eingabe wirst du aus der App ausgeloggt." "Bitte gib die gleiche PIN wie zuvor ein." diff --git a/features/lockscreen/impl/src/main/res/values-sv/translations.xml b/features/lockscreen/impl/src/main/res/values-sv/translations.xml index 67c069affe..14a2faffd9 100644 --- a/features/lockscreen/impl/src/main/res/values-sv/translations.xml +++ b/features/lockscreen/impl/src/main/res/values-sv/translations.xml @@ -1,11 +1,17 @@ + "biometrisk autentisering" + "biometrisk upplåsning" + "Lås upp med biometri" "Glömt PIN-kod?" "Byt PIN-kod" "Tillåt biometrisk upplåsning" "Ta bort PIN-kod" "Är du säker på att du vill ta bort PIN-koden?" "Ta bort PIN-koden?" + "Tillåt %1$s" + "Jag vill hellre använda PIN-kod" + "Bespara dig själv lite tid och använd %1$s för att låsa upp appen varje gång" "Välj PIN-kod" "Bekräfta PIN-kod" "Du kan inte välja detta som din PIN-kod av säkerhetsskäl" @@ -25,5 +31,7 @@ Välj något minnesvärt. Om du glömmer den här PIN-koden loggas du ut från a "Fel PIN-kod. Du har %1$d försök kvar" "Fel PIN-kod. Du har %1$d försök kvar" + "Använd biometri" + "Använd PIN-kod" "Loggar ut …" diff --git a/features/logout/impl/src/main/res/values-de/translations.xml b/features/logout/impl/src/main/res/values-de/translations.xml index a93dc95b54..eeec111177 100644 --- a/features/logout/impl/src/main/res/values-de/translations.xml +++ b/features/logout/impl/src/main/res/values-de/translations.xml @@ -5,7 +5,7 @@ "Abmelden" "Abmelden…" "Du bist dabei, dich von deiner letzten Sitzung abzumelden. Wenn du dich jetzt abmeldest, verlierst du den Zugriff auf deine verschlüsselten Nachrichten." - "Du hast das Backup ausgeschaltet" + "Du hast das Backup deaktiviert." "Deine Schlüssel wurden noch gesichert, als du offline gegangen bist. Stelle die Verbindung wieder her, damit deine Schlüssel gesichert werden können, bevor du dich abmeldest." "Deine Schlüssel werden noch gesichert" "Bitte warte, bis der Vorgang abgeschlossen ist, bevor du dich abmeldest." diff --git a/features/logout/impl/src/main/res/values-sv/translations.xml b/features/logout/impl/src/main/res/values-sv/translations.xml index d1c1369e14..fdf0e5102e 100644 --- a/features/logout/impl/src/main/res/values-sv/translations.xml +++ b/features/logout/impl/src/main/res/values-sv/translations.xml @@ -4,8 +4,15 @@ "Logga ut" "Logga ut" "Loggar ut …" + "Du är på väg att logga ut ur din senaste session. Om du loggar ut nu kommer du att förlora åtkomsten till dina krypterade meddelanden." "Du har stängt av säkerhetskopiering" + "Dina nycklar säkerhetskopierades fortfarande när du gick offline. Anslut igen så att dina nycklar kan säkerhetskopieras innan du loggar ut." + "Dina nycklar säkerhetskopieras fortfarande" + "Vänta tills detta är klart innan du loggar ut." + "Dina nycklar säkerhetskopieras fortfarande" "Logga ut" "Du är på väg att logga ut ur din sista session. Om du loggar ut nu förlorar du åtkomsten till dina krypterade meddelanden." "Återställning inte inställd" + "Du är på väg att logga ut från din senaste session. Om du loggar ut nu kan du förlora åtkomsten till dina krypterade meddelanden." + "Har du sparat din återställningsnyckel?" diff --git a/features/messages/impl/src/main/res/values-sv/translations.xml b/features/messages/impl/src/main/res/values-sv/translations.xml index fddf525181..72b6596743 100644 --- a/features/messages/impl/src/main/res/values-sv/translations.xml +++ b/features/messages/impl/src/main/res/values-sv/translations.xml @@ -21,8 +21,10 @@ "Omröstning" "Textformatering" "Meddelandehistoriken är för närvarande otillgänglig." + "Meddelandehistorik är inte tillgänglig i det här rummet. Verifiera den här enheten för att se din meddelandehistorik." "Vill du bjuda tillbaka dem?" "Du är ensam i den här chatten" + "Meddela hela rummet" "Alla" "Skicka igen" "Ditt meddelande kunde inte skickas" diff --git a/features/roomdetails/impl/build.gradle.kts b/features/roomdetails/impl/build.gradle.kts index ce2aed6e70..624331f62c 100644 --- a/features/roomdetails/impl/build.gradle.kts +++ b/features/roomdetails/impl/build.gradle.kts @@ -58,6 +58,7 @@ dependencies { implementation(libs.coil.compose) implementation(projects.features.leaveroom.api) implementation(projects.features.createroom.api) + implementation(projects.features.userprofile.shared) implementation(projects.services.analytics.api) implementation(projects.features.poll.api) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt index db41748747..239e7dd299 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt @@ -34,9 +34,10 @@ import io.element.android.features.roomdetails.impl.edit.RoomDetailsEditNode import io.element.android.features.roomdetails.impl.invite.RoomInviteMembersNode import io.element.android.features.roomdetails.impl.members.RoomMemberListNode import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsNode -import io.element.android.features.roomdetails.impl.members.details.avatar.AvatarPreviewNode import io.element.android.features.roomdetails.impl.notificationsettings.RoomNotificationSettingsNode import io.element.android.features.roomdetails.impl.rolesandpermissions.RolesAndPermissionsFlowNode +import io.element.android.features.userprofile.shared.UserProfileNodeHelper +import io.element.android.features.userprofile.shared.avatar.AvatarPreviewNode import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode @@ -78,7 +79,7 @@ class RoomDetailsFlowNode @AssistedInject constructor( @Parcelize data class RoomNotificationSettings( /** - * When presented from outsite the context of the room, the rooms settings UI is different. + * When presented from outside the context of the room, the rooms settings UI is different. * Figma designs: https://www.figma.com/file/0MMNu7cTOzLOlWb7ctTkv3/Element-X?type=design&node-id=5199-198932&mode=design&t=fTTvpuxYFjewYQOe-0 */ val showUserDefinedSettingStyle: Boolean @@ -164,7 +165,7 @@ class RoomDetailsFlowNode @AssistedInject constructor( } is NavTarget.RoomMemberDetails -> { - val callback = object : RoomMemberDetailsNode.Callback { + val callback = object : UserProfileNodeHelper.Callback { override fun openAvatarPreview(username: String, avatarUrl: String) { backstack.push(NavTarget.AvatarPreview(username, avatarUrl)) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt index ebdd524ed6..668add6f1c 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt @@ -17,7 +17,7 @@ package io.element.android.features.roomdetails.impl import io.element.android.features.leaveroom.api.LeaveRoomState -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState +import io.element.android.features.userprofile.shared.UserProfileState 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.room.RoomMember @@ -32,7 +32,7 @@ data class RoomDetailsState( val memberCount: Long, val isEncrypted: Boolean, val roomType: RoomDetailsType, - val roomMemberDetailsState: RoomMemberDetailsState?, + val roomMemberDetailsState: UserProfileState?, val canEdit: Boolean, val canInvite: Boolean, val canShowNotificationSettings: Boolean, 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 f398a6704b..c2b262ac71 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 @@ -19,8 +19,8 @@ package io.element.android.features.roomdetails.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState -import io.element.android.features.roomdetails.impl.members.details.aRoomMemberDetailsState +import io.element.android.features.userprofile.shared.UserProfileState +import io.element.android.features.userprofile.shared.aUserProfileState 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.core.UserId @@ -90,7 +90,7 @@ fun aRoomDetailsState( canEdit: Boolean = false, canShowNotificationSettings: Boolean = true, roomType: RoomDetailsType = RoomDetailsType.Room, - roomMemberDetailsState: RoomMemberDetailsState? = null, + roomMemberDetailsState: UserProfileState? = null, leaveRoomState: LeaveRoomState = aLeaveRoomState(), roomNotificationSettings: RoomNotificationSettings = aRoomNotificationSettings(), isFavorite: Boolean = false, @@ -130,5 +130,5 @@ fun aDmRoomDetailsState( ) = aRoomDetailsState( roomName = roomName, roomType = RoomDetailsType.Dm(aDmRoomMember(isIgnored = isDmMemberIgnored)), - roomMemberDetailsState = aRoomMemberDetailsState() + roomMemberDetailsState = aUserProfileState() ) 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 fc49bb383a..5058a38a36 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 @@ -49,10 +49,10 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.leaveroom.api.LeaveRoomView -import io.element.android.features.roomdetails.impl.blockuser.BlockUserDialogs -import io.element.android.features.roomdetails.impl.blockuser.BlockUserSection -import io.element.android.features.roomdetails.impl.members.details.RoomMemberHeaderSection -import io.element.android.features.roomdetails.impl.members.details.RoomMemberMainActionsSection +import io.element.android.features.userprofile.shared.UserProfileHeaderSection +import io.element.android.features.userprofile.shared.UserProfileMainActionsSection +import io.element.android.features.userprofile.shared.blockuser.BlockUserDialogs +import io.element.android.features.userprofile.shared.blockuser.BlockUserSection import io.element.android.libraries.architecture.coverage.ExcludeFromCoverage import io.element.android.libraries.designsystem.components.ClickableLinkText import io.element.android.libraries.designsystem.components.avatar.Avatar @@ -143,15 +143,15 @@ fun RoomDetailsView( is RoomDetailsType.Dm -> { val member = state.roomType.roomMember - RoomMemberHeaderSection( + UserProfileHeaderSection( avatarUrl = state.roomAvatarUrl ?: member.avatarUrl, - userId = member.userId.value, + userId = member.userId, userName = state.roomName, openAvatarPreview = { avatarUrl -> openAvatarPreview(member.getBestName(), avatarUrl) }, ) - RoomMemberMainActionsSection(onShareUser = ::onShareMember) + UserProfileMainActionsSection(onShareUser = ::onShareMember) } } Spacer(Modifier.height(18.dp)) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt index 71cd975e18..14ab79df4c 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt @@ -28,8 +28,8 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode -import io.element.android.features.roomdetails.impl.R -import io.element.android.libraries.androidutils.system.startSharePlainTextIntent +import io.element.android.features.userprofile.shared.UserProfileNodeHelper +import io.element.android.features.userprofile.shared.UserProfileView import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -38,8 +38,6 @@ 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.permalink.PermalinkBuilder import io.element.android.services.analytics.api.AnalyticsService -import timber.log.Timber -import io.element.android.libraries.androidutils.R as AndroidUtilsR @ContributesNode(RoomScope::class) class RoomMemberDetailsNode @AssistedInject constructor( @@ -49,18 +47,14 @@ class RoomMemberDetailsNode @AssistedInject constructor( private val permalinkBuilder: PermalinkBuilder, presenterFactory: RoomMemberDetailsPresenter.Factory, ) : Node(buildContext, plugins = plugins) { - interface Callback : NodeInputs { - fun openAvatarPreview(username: String, avatarUrl: String) - fun onStartDM(roomId: RoomId) - } - data class RoomMemberDetailsInput( val roomMemberId: UserId ) : NodeInputs private val inputs = inputs() - private val callback = inputs() + private val callback = inputs() private val presenter = presenterFactory.create(inputs.roomMemberId) + private val userProfileNodeHelper = UserProfileNodeHelper(inputs.roomMemberId) init { lifecycle.subscribe( @@ -75,17 +69,7 @@ class RoomMemberDetailsNode @AssistedInject constructor( val context = LocalContext.current fun onShareUser() { - val permalinkResult = permalinkBuilder.permalinkForUser(inputs.roomMemberId) - permalinkResult.onSuccess { permalink -> - context.startSharePlainTextIntent( - activityResultLauncher = null, - chooserTitle = context.getString(R.string.screen_room_details_share_room_title), - text = permalink, - noActivityFoundMessage = context.getString(AndroidUtilsR.string.error_no_compatible_app_found) - ) - }.onFailure { - Timber.e(it) - } + userProfileNodeHelper.onShareUser(context, permalinkBuilder) } fun onStartDM(roomId: RoomId) { @@ -95,11 +79,12 @@ class RoomMemberDetailsNode @AssistedInject constructor( val state = presenter.present() LaunchedEffect(state.startDmActionState) { - if (state.startDmActionState is AsyncAction.Success) { - onStartDM(state.startDmActionState.data) + val result = state.startDmActionState + if (result is AsyncAction.Success) { + onStartDM(result.data) } } - RoomMemberDetailsView( + UserProfileView( state = state, modifier = modifier, goBack = this::navigateUp, 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 dcb953e978..4ac9da2e19 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 @@ -28,7 +28,10 @@ import androidx.compose.runtime.setValue import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.features.createroom.api.StartDMAction -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState.ConfirmationDialog +import io.element.android.features.userprofile.shared.UserProfileEvents +import io.element.android.features.userprofile.shared.UserProfilePresenterHelper +import io.element.android.features.userprofile.shared.UserProfileState +import io.element.android.features.userprofile.shared.UserProfileState.ConfirmationDialog import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter @@ -39,7 +42,6 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.room.getRoomMemberAsState -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -51,13 +53,18 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( private val client: MatrixClient, private val room: MatrixRoom, private val startDMAction: StartDMAction, -) : Presenter { +) : Presenter { interface Factory { fun create(roomMemberId: UserId): RoomMemberDetailsPresenter } + private val userProfilePresenterHelper = UserProfilePresenterHelper( + userId = roomMemberId, + client = client, + ) + @Composable - override fun present(): RoomMemberDetailsState { + override fun present(): UserProfileState { val coroutineScope = rememberCoroutineScope() var confirmationDialog by remember { mutableStateOf(null) } val roomMember by room.getRoomMemberAsState(roomMemberId) @@ -81,34 +88,34 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( } } - fun handleEvents(event: RoomMemberDetailsEvents) { + fun handleEvents(event: UserProfileEvents) { when (event) { - is RoomMemberDetailsEvents.BlockUser -> { + is UserProfileEvents.BlockUser -> { if (event.needsConfirmation) { confirmationDialog = ConfirmationDialog.Block } else { confirmationDialog = null - coroutineScope.blockUser(roomMemberId, isBlocked) + userProfilePresenterHelper.blockUser(coroutineScope, isBlocked) } } - is RoomMemberDetailsEvents.UnblockUser -> { + is UserProfileEvents.UnblockUser -> { if (event.needsConfirmation) { confirmationDialog = ConfirmationDialog.Unblock } else { confirmationDialog = null - coroutineScope.unblockUser(roomMemberId, isBlocked) + userProfilePresenterHelper.unblockUser(coroutineScope, isBlocked) } } - RoomMemberDetailsEvents.ClearConfirmationDialog -> confirmationDialog = null - RoomMemberDetailsEvents.ClearBlockUserError -> { + UserProfileEvents.ClearConfirmationDialog -> confirmationDialog = null + UserProfileEvents.ClearBlockUserError -> { isBlocked.value = AsyncData.Success(isBlocked.value.dataOrNull().orFalse()) } - RoomMemberDetailsEvents.StartDM -> { + UserProfileEvents.StartDM -> { coroutineScope.launch { startDMAction.execute(roomMemberId, startDmActionState) } } - RoomMemberDetailsEvents.ClearStartDMState -> { + UserProfileEvents.ClearStartDMState -> { startDmActionState.value = AsyncAction.Uninitialized } } @@ -144,8 +151,8 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( ) } - return RoomMemberDetailsState( - userId = roomMemberId.value, + return UserProfileState( + userId = roomMemberId, userName = userName, avatarUrl = userAvatar, isBlocked = isBlocked.value, @@ -155,22 +162,4 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( eventSink = ::handleEvents ) } - - private fun CoroutineScope.blockUser(userId: UserId, isBlockedState: MutableState>) = launch { - isBlockedState.value = AsyncData.Loading(false) - client.ignoreUser(userId) - .onFailure { - isBlockedState.value = AsyncData.Failure(it, false) - } - // Note: on success, ignoredUserList will be updated. - } - - private fun CoroutineScope.unblockUser(userId: UserId, isBlockedState: MutableState>) = launch { - isBlockedState.value = AsyncData.Loading(true) - client.unignoreUser(userId) - .onFailure { - isBlockedState.value = AsyncData.Failure(it, true) - } - // Note: on success, ignoredUserList will be updated. - } } diff --git a/features/roomdetails/impl/src/main/res/values-be/translations.xml b/features/roomdetails/impl/src/main/res/values-be/translations.xml index 3761d90ac4..cb2dc4ce7c 100644 --- a/features/roomdetails/impl/src/main/res/values-be/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-be/translations.xml @@ -1,11 +1,5 @@ - "Заблакіраваць" - "Заблакіраваныя карыстальнікі не змогуць адпраўляць вам паведамленні, і ўсе іх паведамленні будуць схаваны. Вы можаце разблакіраваць іх у любы час." - "Заблакіраваць карыстальніка" - "Разблакіраваць" - "Вы зноў зможаце ўбачыць усе паведамленні." - "Разблакіраваць карыстальніка" "Пры абнаўленні налад апавяшчэнняў адбылася памылка." "Ваш хатні сервер не падтрымлівае гэтую опцыю ў зашыфраваных пакоях, вы можаце не атрымаць апавяшчэнне ў некаторых пакоях." "Апытанні" @@ -117,5 +111,4 @@ "Ролі" "Дэталі пакоя" "Ролі і дазволы" - "Пры спробе пачаць чат адбылася памылка" diff --git a/features/roomdetails/impl/src/main/res/values-bg/translations.xml b/features/roomdetails/impl/src/main/res/values-bg/translations.xml index 5cc105f657..e764baee3c 100644 --- a/features/roomdetails/impl/src/main/res/values-bg/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-bg/translations.xml @@ -1,9 +1,5 @@ - "Блокиране" - "Блокиране на потребителя" - "Отблокиране" - "Отблокиране на потребителя" "Анкети" "Членове" "Добавяне на тема" diff --git a/features/roomdetails/impl/src/main/res/values-cs/translations.xml b/features/roomdetails/impl/src/main/res/values-cs/translations.xml index f44cdd210a..a8bbc85973 100644 --- a/features/roomdetails/impl/src/main/res/values-cs/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-cs/translations.xml @@ -1,11 +1,5 @@ - "Zablokovat" - "Blokovaní uživatelé vám nebudou moci posílat zprávy a všechny jejich zprávy budou skryty. Můžete je kdykoli odblokovat." - "Zablokovat uživatele" - "Odblokovat" - "Znovu uvidíte všechny zprávy od nich." - "Odblokovat uživatele" "Při aktualizaci nastavení oznámení došlo k chybě." "Váš domovský server tuto možnost v zašifrovaných místnostech nepodporuje, v některých místnostech nemusíte být upozorněni." "Hlasování" @@ -117,5 +111,4 @@ "Role" "Podrobnosti místnosti" "Role a oprávnění" - "Při pokusu o zahájení chatu došlo k chybě" diff --git a/features/roomdetails/impl/src/main/res/values-de/translations.xml b/features/roomdetails/impl/src/main/res/values-de/translations.xml index dfecc5eb75..ae0366a6b1 100644 --- a/features/roomdetails/impl/src/main/res/values-de/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-de/translations.xml @@ -1,11 +1,5 @@ - "Blockieren" - "Blockierte Benutzer können Dir keine Nachrichten senden und alle ihre alten Nachrichten werden ausgeblendet. Die Blockierung kann jederzeit aufgehoben werden." - "Benutzer blockieren" - "Blockierung aufheben" - "Der Nutzer kann dir wieder Nachrichten senden & alle Nachrichten des Nutzers werden wieder angezeigt." - "Blockierung aufheben" "Beim Aktualisieren der Benachrichtigungseinstellungen ist ein Fehler aufgetreten." "Dein Homeserver unterstützt diese Option in verschlüsselten Chat nicht. In einigen Chats wirst du möglicherweise nicht benachrichtigt." "Umfragen" @@ -20,15 +14,15 @@ "Personen entfernen" "Avatar ändern" "Raum-Details anpassen" - "Raum-Name ändern" - "Raum-Thema ändern" + "Raumname ändern" + "Raumthema ändern" "Nachrichten senden" "Admins bearbeiten" - "Du kannst diese Aktion nicht mehr rückgängig machen. Du vergibst dieselbe Rolle, wie auch Du sie hast." + "Du kannst diese Aktion nicht mehr rückgängig machen. Du vergibst dieselbe Rolle, die du auch hast." "Als Administrator hinzufügen?" "Zurückstufen" "Du stufst dich selbst herab. Diese Änderung kann nicht rückgängig gemacht werden. Wenn du der letzte Benutzer mit dieser Rolle bist, ist es nicht möglich, diese Rolle wiederzuerlangen." - "Möchtest Du Dich selbst herabstufen?" + "Möchtest du dich selbst herabstufen?" "%1$s (Ausstehend)" "(Ausstehend)" "Administratoren haben automatisch Moderatorenrechte" @@ -56,7 +50,7 @@ "Standard" "Benachrichtigungen" "Rollen und Berechtigungen" - "Raum-Name" + "Raumname" "Sicherheit" "Teilen" "Informationen" @@ -116,5 +110,4 @@ "Rollen" "Raum-Details anpassen" "Rollen und Berechtigungen" - "Beim Versuch, einen Chat zu starten, ist ein Fehler aufgetreten" diff --git a/features/roomdetails/impl/src/main/res/values-es/translations.xml b/features/roomdetails/impl/src/main/res/values-es/translations.xml index 5ae61bd4df..16e6a55cfd 100644 --- a/features/roomdetails/impl/src/main/res/values-es/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-es/translations.xml @@ -1,11 +1,5 @@ - "Bloquear" - "Los usuarios bloqueados no podrán enviarte mensajes y todos sus mensajes se ocultarán. Puedes desbloquearlos cuando quieras." - "Bloquear usuario" - "Desbloquear" - "Podrás ver todos sus mensajes de nuevo." - "Desbloquear usuario" "Se ha producido un error al actualizar la configuración de notificaciones." "Tu servidor principal no admite esta opción en salas cifradas, puede que no recibas notificaciones en algunas salas." "Encuestas" @@ -51,5 +45,4 @@ "Todos los mensajes" "Únicamente Menciones y Palabras clave" "En esta sala, notificarme por" - "Se ha producido un error al intentar iniciar un chat" diff --git a/features/roomdetails/impl/src/main/res/values-fr/translations.xml b/features/roomdetails/impl/src/main/res/values-fr/translations.xml index d4f4cab64c..71bc11c618 100644 --- a/features/roomdetails/impl/src/main/res/values-fr/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-fr/translations.xml @@ -1,11 +1,5 @@ - "Bloquer" - "Les utilisateurs bloqués ne pourront pas vous envoyer de messages et tous leurs messages seront masqués. Vous pouvez les débloquer à tout moment." - "Bloquer l’utilisateur" - "Débloquer" - "Vous pourrez à nouveau voir tous ses messages." - "Débloquer l’utilisateur" "Une erreur s’est produite lors de la mise à jour du paramètre de notification." "Votre serveur d’accueil ne supporte pas cette option pour les salons chiffrés, vous pourriez ne pas être notifié(e) dans certains salons." "Sondages" @@ -116,5 +110,4 @@ "Rôles" "Détails du salon" "Rôles et autorisations" - "Une erreur s’est produite lors de la tentative de création de la discussion" diff --git a/features/roomdetails/impl/src/main/res/values-hu/translations.xml b/features/roomdetails/impl/src/main/res/values-hu/translations.xml index 4fa200ee58..883a67e014 100644 --- a/features/roomdetails/impl/src/main/res/values-hu/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-hu/translations.xml @@ -1,11 +1,5 @@ - "Letiltás" - "A letiltott felhasználók nem fognak tudni üzeneteket küldeni, és az összes üzenetük rejtve lesz. Bármikor feloldhatja a letiltásukat." - "Felhasználó letiltása" - "Letiltás feloldása" - "Újra láthatja az összes üzenetét." - "Felhasználó kitiltásának feloldása" "Hiba történt az értesítési beállítás frissítésekor." "A Matrix-kiszolgálója nem támogatja ezt a beállítást a titkosított szobákban, előfordulhat, hogy egyes szobákban nem kap értesítést." "Szavazások" @@ -116,5 +110,4 @@ "Szerepkörök" "Szoba részletei" "Szerepkörök és jogosultságok" - "Hiba történt a csevegés indításakor" diff --git a/features/roomdetails/impl/src/main/res/values-in/translations.xml b/features/roomdetails/impl/src/main/res/values-in/translations.xml index c9aedeefd1..022126bb1c 100644 --- a/features/roomdetails/impl/src/main/res/values-in/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-in/translations.xml @@ -1,11 +1,5 @@ - "Blokir" - "Pengguna yang diblokir tidak akan dapat mengirim Anda pesan dan semua pesan mereka akan disembunyikan. Anda dapat membuka blokirnya kapan saja." - "Blokir pengguna" - "Buka blokir" - "Anda akan dapat melihat semua pesan dari mereka lagi." - "Buka blokir pengguna" "Terjadi kesalahan saat memperbarui pengaturan pemberitahuan." "Homeserver Anda tidak mendukung opsi ini dalam ruangan terenkripsi, Anda mungkin tidak diberi tahu dalam beberapa ruangan." "Pemungutan suara" @@ -115,5 +109,4 @@ "Peran" "Detail ruangan" "Peran dan perizinan" - "Terjadi kesalahan saat mencoba memulai obrolan" diff --git a/features/roomdetails/impl/src/main/res/values-it/translations.xml b/features/roomdetails/impl/src/main/res/values-it/translations.xml index 3c5659a3f7..ab3ec27fcc 100644 --- a/features/roomdetails/impl/src/main/res/values-it/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-it/translations.xml @@ -1,11 +1,5 @@ - "Blocca" - "Gli utenti bloccati non saranno in grado di inviarti messaggi e tutti quelli già ricevuti saranno nascosti. Puoi sbloccarli in qualsiasi momento." - "Blocca utente" - "Sblocca" - "Potrai vedere di nuovo tutti i suoi messaggi." - "Sblocca utente" "Si è verificato un errore durante l\'aggiornamento delle impostazioni di notifica." "Il tuo homeserver non supporta questa opzione nelle stanze crifrate, quindi potresti non ricevere notifiche in alcune stanze." "Sondaggi" @@ -113,5 +107,4 @@ "Ruoli" "Dettagli della stanza" "Ruoli e autorizzazioni" - "Si è verificato un errore durante il tentativo di avviare una chat" diff --git a/features/roomdetails/impl/src/main/res/values-ro/translations.xml b/features/roomdetails/impl/src/main/res/values-ro/translations.xml index 0f4c19b4d8..ef8edf43be 100644 --- a/features/roomdetails/impl/src/main/res/values-ro/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-ro/translations.xml @@ -1,11 +1,5 @@ - "Blocați" - "Utilizatorii blocați nu vă vor putea trimite mesaje și toate mesajele lor vor fi ascunse. Puteți anula această acțiune oricând." - "Blocați utilizatorul" - "Deblocați" - "La deblocarea utilizatorului, veți putea vedea din nou toate mesajele de la acesta." - "Deblocați utilizatorul" "A apărut o eroare în timpul actualizării setărilor pentru notificari." "Serverul dumneavoastră nu acceptă această opțiune în camerele criptate, este posibil să nu primiți notificări în unele camere." "Sondaje" @@ -63,5 +57,4 @@ "Toate mesajele" "Numai mențiuni și cuvinte cheie" "În această cameră, anunțați-mă pentru" - "A apărut o eroare la încercarea începerii conversației" diff --git a/features/roomdetails/impl/src/main/res/values-ru/translations.xml b/features/roomdetails/impl/src/main/res/values-ru/translations.xml index 2cfa24a003..1b0bc8d193 100644 --- a/features/roomdetails/impl/src/main/res/values-ru/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-ru/translations.xml @@ -1,11 +1,5 @@ - "Заблокировать" - "Заблокированные пользователи не смогут отправлять вам сообщения, а все их сообщения будут скрыты. Вы можете разблокировать их в любое время." - "Заблокировать пользователя" - "Разблокировать" - "Вы снова сможете увидеть все сообщения." - "Разблокировать пользователя" "При обновлении настроек уведомления произошла ошибка." "Ваш домашний сервер не поддерживает эту опцию в зашифрованных комнатах, в некоторых комнатах вы можете не получать уведомления." "Опросы" @@ -117,5 +111,4 @@ "Роли" "Информация о комнате" "Роли и разрешения" - "Произошла ошибка при попытке открытия комнаты" diff --git a/features/roomdetails/impl/src/main/res/values-sk/translations.xml b/features/roomdetails/impl/src/main/res/values-sk/translations.xml index 7feb1d4e41..467ba5578a 100644 --- a/features/roomdetails/impl/src/main/res/values-sk/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-sk/translations.xml @@ -1,11 +1,5 @@ - "Zablokovať" - "Blokovaní používatelia vám nebudú môcť posielať správy a všetky ich správy budú skryté. Môžete ich kedykoľvek odblokovať." - "Zablokovať používateľa" - "Odblokovať" - "Všetky správy od nich budete môcť opäť vidieť." - "Odblokovať používateľa" "Pri aktualizácii nastavenia oznámenia došlo k chybe." "Váš domovský server nepodporuje túto možnosť v šifrovaných miestnostiach, v niektorých miestnostiach nemusíte dostať upozornenie." "Ankety" @@ -117,5 +111,4 @@ "Roly" "Podrobnosti o miestnosti" "Roly a povolenia" - "Pri pokuse o spustenie konverzácie sa vyskytla chyba" diff --git a/features/roomdetails/impl/src/main/res/values-sv/translations.xml b/features/roomdetails/impl/src/main/res/values-sv/translations.xml index 770101de00..7bc9a16881 100644 --- a/features/roomdetails/impl/src/main/res/values-sv/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-sv/translations.xml @@ -1,11 +1,5 @@ - "Blockera" - "Blockerade användare kommer inte att kunna skicka meddelanden till dig och alla deras meddelanden kommer att döljas. Du kan avblockera dem när som helst." - "Blockera användare" - "Avblockera" - "Du kommer att kunna se alla meddelanden från dem igen." - "Avblockera användare" "Ett fel uppstod vid uppdatering av aviseringsinställningen." "Alla" "Lägg till ämne" @@ -48,5 +42,4 @@ "Alla meddelanden" "Endast omnämnanden och nyckelord" "I det här rummet, meddela mig för" - "Ett fel uppstod när du försökte starta en chatt" diff --git a/features/roomdetails/impl/src/main/res/values-uk/translations.xml b/features/roomdetails/impl/src/main/res/values-uk/translations.xml index 415334df5a..e61a7052a3 100644 --- a/features/roomdetails/impl/src/main/res/values-uk/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-uk/translations.xml @@ -1,11 +1,5 @@ - "Заблокувати" - "Заблоковані користувачі не зможуть надсилати Вам повідомлення, і всі їхні повідомлення будуть приховані. Ви можете розблокувати їх у будь-який час." - "Заблокувати користувача" - "Розблокувати" - "Ви знову зможете бачити всі повідомлення від них." - "Розблокувати користувача" "Під час оновлення налаштувань сповіщень сталася помилка." "Ваш домашній сервер не підтримує цю опцію в зашифрованих кімнатах, ви можете не отримати сповіщення в деяких кімнатах." "Опитування" @@ -113,5 +107,4 @@ "Ролі" "Деталі кімнати" "Ролі та дозволи" - "Під час спроби почати чат сталася помилка" diff --git a/features/roomdetails/impl/src/main/res/values-zh-rTW/translations.xml b/features/roomdetails/impl/src/main/res/values-zh-rTW/translations.xml index c1701ce69b..11769b3176 100644 --- a/features/roomdetails/impl/src/main/res/values-zh-rTW/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-zh-rTW/translations.xml @@ -1,9 +1,5 @@ - "封鎖" - "封鎖使用者" - "解除封鎖" - "解除封鎖使用者" "更新通知設定時發生錯誤。" "所有投票" "所有人" diff --git a/features/roomdetails/impl/src/main/res/values/localazy.xml b/features/roomdetails/impl/src/main/res/values/localazy.xml index 8067676f93..9ffccd0c29 100644 --- a/features/roomdetails/impl/src/main/res/values/localazy.xml +++ b/features/roomdetails/impl/src/main/res/values/localazy.xml @@ -1,11 +1,5 @@ - "Block" - "Blocked users won\'t be able to send you messages and all their messages will be hidden. You can unblock them anytime." - "Block user" - "Unblock" - "You\'ll be able to see all messages from them again." - "Unblock user" "An error occurred while updating the notification setting." "Your homeserver does not support this option in encrypted rooms, you may not get notified in some rooms." "Polls" @@ -116,5 +110,4 @@ "Roles" "Room details" "Roles and permissions" - "An error occurred when trying to start a chat" diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt index 4c8b944c8a..c615ba3da9 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt @@ -25,9 +25,9 @@ import io.element.android.features.createroom.api.StartDMAction import io.element.android.features.createroom.test.FakeStartDMAction import io.element.android.features.roomdetails.aMatrixRoom import io.element.android.features.roomdetails.impl.members.aRoomMember -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsEvents import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsPresenter -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState +import io.element.android.features.userprofile.shared.UserProfileEvents +import io.element.android.features.userprofile.shared.UserProfileState import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.matrix.api.MatrixClient @@ -66,7 +66,7 @@ class RoomMemberDetailsPresenterTests { presenter.present() }.test { val initialState = awaitFirstItem() - assertThat(initialState.userId).isEqualTo(roomMember.userId.value) + assertThat(initialState.userId).isEqualTo(roomMember.userId) assertThat(initialState.userName).isEqualTo(roomMember.displayName) assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl) assertThat(initialState.isBlocked).isEqualTo(AsyncData.Success(roomMember.isIgnored)) @@ -157,12 +157,12 @@ class RoomMemberDetailsPresenterTests { presenter.present() }.test { val initialState = awaitFirstItem() - initialState.eventSink(RoomMemberDetailsEvents.BlockUser(needsConfirmation = true)) + initialState.eventSink(UserProfileEvents.BlockUser(needsConfirmation = true)) val dialogState = awaitItem() - assertThat(dialogState.displayConfirmationDialog).isEqualTo(RoomMemberDetailsState.ConfirmationDialog.Block) + assertThat(dialogState.displayConfirmationDialog).isEqualTo(UserProfileState.ConfirmationDialog.Block) - dialogState.eventSink(RoomMemberDetailsEvents.ClearConfirmationDialog) + dialogState.eventSink(UserProfileEvents.ClearConfirmationDialog) assertThat(awaitItem().displayConfirmationDialog).isNull() ensureAllEventsConsumed() @@ -181,12 +181,12 @@ class RoomMemberDetailsPresenterTests { presenter.present() }.test { val initialState = awaitFirstItem() - initialState.eventSink(RoomMemberDetailsEvents.BlockUser(needsConfirmation = false)) + initialState.eventSink(UserProfileEvents.BlockUser(needsConfirmation = false)) assertThat(awaitItem().isBlocked.isLoading()).isTrue() client.emitIgnoreUserList(listOf(roomMember.userId)) assertThat(awaitItem().isBlocked.dataOrNull()).isTrue() - initialState.eventSink(RoomMemberDetailsEvents.UnblockUser(needsConfirmation = false)) + initialState.eventSink(UserProfileEvents.UnblockUser(needsConfirmation = false)) assertThat(awaitItem().isBlocked.isLoading()).isTrue() client.emitIgnoreUserList(listOf()) assertThat(awaitItem().isBlocked.dataOrNull()).isFalse() @@ -202,12 +202,12 @@ class RoomMemberDetailsPresenterTests { presenter.present() }.test { val initialState = awaitFirstItem() - initialState.eventSink(RoomMemberDetailsEvents.BlockUser(needsConfirmation = false)) + initialState.eventSink(UserProfileEvents.BlockUser(needsConfirmation = false)) assertThat(awaitItem().isBlocked.isLoading()).isTrue() val errorState = awaitItem() assertThat(errorState.isBlocked.errorOrNull()).isEqualTo(A_THROWABLE) // Clear error - initialState.eventSink(RoomMemberDetailsEvents.ClearBlockUserError) + initialState.eventSink(UserProfileEvents.ClearBlockUserError) assertThat(awaitItem().isBlocked).isEqualTo(AsyncData.Success(false)) } } @@ -221,12 +221,12 @@ class RoomMemberDetailsPresenterTests { presenter.present() }.test { val initialState = awaitFirstItem() - initialState.eventSink(RoomMemberDetailsEvents.UnblockUser(needsConfirmation = false)) + initialState.eventSink(UserProfileEvents.UnblockUser(needsConfirmation = false)) assertThat(awaitItem().isBlocked.isLoading()).isTrue() val errorState = awaitItem() assertThat(errorState.isBlocked.errorOrNull()).isEqualTo(A_THROWABLE) // Clear error - initialState.eventSink(RoomMemberDetailsEvents.ClearBlockUserError) + initialState.eventSink(UserProfileEvents.ClearBlockUserError) assertThat(awaitItem().isBlocked).isEqualTo(AsyncData.Success(true)) } } @@ -238,12 +238,12 @@ class RoomMemberDetailsPresenterTests { presenter.present() }.test { val initialState = awaitFirstItem() - initialState.eventSink(RoomMemberDetailsEvents.UnblockUser(needsConfirmation = true)) + initialState.eventSink(UserProfileEvents.UnblockUser(needsConfirmation = true)) val dialogState = awaitItem() - assertThat(dialogState.displayConfirmationDialog).isEqualTo(RoomMemberDetailsState.ConfirmationDialog.Unblock) + assertThat(dialogState.displayConfirmationDialog).isEqualTo(UserProfileState.ConfirmationDialog.Unblock) - dialogState.eventSink(RoomMemberDetailsEvents.ClearConfirmationDialog) + dialogState.eventSink(UserProfileEvents.ClearConfirmationDialog) assertThat(awaitItem().displayConfirmationDialog).isNull() ensureAllEventsConsumed() @@ -264,18 +264,18 @@ class RoomMemberDetailsPresenterTests { // Failure startDMAction.givenExecuteResult(startDMFailureResult) - initialState.eventSink(RoomMemberDetailsEvents.StartDM) + initialState.eventSink(UserProfileEvents.StartDM) assertThat(awaitItem().startDmActionState).isInstanceOf(AsyncAction.Loading::class.java) awaitItem().also { state -> assertThat(state.startDmActionState).isEqualTo(startDMFailureResult) - state.eventSink(RoomMemberDetailsEvents.ClearStartDMState) + state.eventSink(UserProfileEvents.ClearStartDMState) } // Success startDMAction.givenExecuteResult(startDMSuccessResult) awaitItem().also { state -> assertThat(state.startDmActionState).isEqualTo(AsyncAction.Uninitialized) - state.eventSink(RoomMemberDetailsEvents.StartDM) + state.eventSink(UserProfileEvents.StartDM) } assertThat(awaitItem().startDmActionState).isInstanceOf(AsyncAction.Loading::class.java) awaitItem().also { state -> diff --git a/features/roomlist/impl/src/main/res/values-sv/translations.xml b/features/roomlist/impl/src/main/res/values-sv/translations.xml index 7bc59f17e8..7253f19276 100644 --- a/features/roomlist/impl/src/main/res/values-sv/translations.xml +++ b/features/roomlist/impl/src/main/res/values-sv/translations.xml @@ -1,5 +1,7 @@ + "Din chattsäkerhetskopia är för närvarande inte synkroniserad. Du måste ange din återställningsnyckel för att behålla åtkomsten till din chattsäkerhetskopia." + "Ange din återställningsnyckel" "Är du säker på att du vill tacka nej till inbjudan att gå med%1$s?" "Avböj inbjudan" "Är du säker på att du vill avböja denna privata chatt med %1$s?" diff --git a/features/roomlist/impl/src/main/res/values-zh-rTW/translations.xml b/features/roomlist/impl/src/main/res/values-zh-rTW/translations.xml index 84de2a0d35..8d0ec972f7 100644 --- a/features/roomlist/impl/src/main/res/values-zh-rTW/translations.xml +++ b/features/roomlist/impl/src/main/res/values-zh-rTW/translations.xml @@ -8,6 +8,8 @@ "建立新的對話或聊天室" "我的最愛" "夥伴" + "聊天室" + "未讀" "所有聊天室" "您似乎正在使用新的裝置。請使用另一個裝置進行驗證,以存取您的加密訊息。" "驗證這是您本人" diff --git a/features/securebackup/impl/src/main/res/values-de/translations.xml b/features/securebackup/impl/src/main/res/values-de/translations.xml index c7a4eca7d3..c95e51db7e 100644 --- a/features/securebackup/impl/src/main/res/values-de/translations.xml +++ b/features/securebackup/impl/src/main/res/values-de/translations.xml @@ -31,13 +31,14 @@ "Ausschalten" "Du verlierst deine verschlüsselten Nachrichten, wenn du auf allen Geräten abgemeldet bist." - "Bist du sicher, dass du das Backup ausschalten willst?" - "Wenn du das Backup ausschaltest, wird dein aktuelles Backup des Verschlüsselungsschlüssels entfernt und andere Sicherheitsfunktionen werden deaktiviert. In diesem Fall wirst du:" - "Keine Historie für verschlüsselte Nachrichten auf neuen Geräten" + "Bist du sicher, dass du das Backup deaktivieren willst?" + "Wenn du das Backup deaktivierst, wird dein aktuelles Backup des Verschlüsselungsschlüssels entfernt und andere Sicherheitsfunktionen werden deaktiviert. +Das bedeutet:" + "Keine Historie für verschlüsselte Nachrichten auf neuen Geräten ." "Du verlierst den Zugriff auf deine verschlüsselten Nachrichten, wenn du dich überall von %1$s abmeldest" - "Bist du sicher, dass du das Backup ausschalten willst?" - "Besorge dir einen neuen Wiederherstellungsschlüssel, wenn du deinen alten verloren hast. Nachdem du deinen Wiederherstellungsschlüssel geändert hast, funktioniert dein alter Schlüssel nicht mehr." - "Erstelle einen neuen Wiederherstellungsschlüssel" + "Bist du sicher, dass du das Backup deaktivieren willst?" + "Hier kannst Du einen neuen Wiederherstellungsschlüssel erstellen. Nachdem Du einen neuen Wiederherstellungsschlüssel erstellt hast, funktioniert dein alter Schlüssel nicht mehr." + "Wiederherstellungsschlüssel erstellen" "Stelle sicher, dass du deinen Wiederherstellungsschlüssel an einem sicheren Ort aufbewahren kannst" "Wiederherstellungsschlüssel geändert" "Wiederherstellungsschlüssel ändern?" @@ -55,7 +56,7 @@ " oder Passcode" "Eingeben…" - "Hast Du Deinen Wiederherstellungschlüssel vergessen?" + "Hast du deinen Wiederherstellungschlüssel vergessen?" "Wiederherstellungsschlüssel bestätigt" "Bitte Wiederherstellungsschlüssel eingeben" "Wiederherstellungsschlüssel kopiert" diff --git a/features/securebackup/impl/src/main/res/values-sv/translations.xml b/features/securebackup/impl/src/main/res/values-sv/translations.xml index 3b36ee9a43..cf73f06c7b 100644 --- a/features/securebackup/impl/src/main/res/values-sv/translations.xml +++ b/features/securebackup/impl/src/main/res/values-sv/translations.xml @@ -22,10 +22,13 @@ "Återställningsnyckel ändrad" "Byt återställningsnyckel?" "Se till att ingen kan se den här skärmen" + "Felaktig återställningsnyckel" "Om du har en säkerhetsnyckel eller säkerhetsfras så funkar den också." "Ange …" "Återställningsnyckel bekräftad" "Ange din återställningsnyckel" + "Kopierade återställningsnyckel" + "Genererar …" "Spara återställningsnyckeln" "Skriv ner din återställningsnyckel någonstans säkert eller spara den i en lösenordshanterare." "Tryck för att kopiera återställningsnyckeln" diff --git a/features/userprofile/api/build.gradle.kts b/features/userprofile/api/build.gradle.kts new file mode 100644 index 0000000000..95e22ffb29 --- /dev/null +++ b/features/userprofile/api/build.gradle.kts @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + id("io.element.android-library") + id("kotlin-parcelize") +} + +android { + namespace = "io.element.android.features.userprofile.api" +} + +dependencies { + implementation(projects.libraries.architecture) + implementation(projects.libraries.matrix.api) +} diff --git a/features/userprofile/api/src/main/kotlin/io/element/android/features/userprofile/api/UserProfileEntryPoint.kt b/features/userprofile/api/src/main/kotlin/io/element/android/features/userprofile/api/UserProfileEntryPoint.kt new file mode 100644 index 0000000000..ca77008c3c --- /dev/null +++ b/features/userprofile/api/src/main/kotlin/io/element/android/features/userprofile/api/UserProfileEntryPoint.kt @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.api + +import com.bumble.appyx.core.modality.BuildContext +import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin +import io.element.android.libraries.architecture.FeatureEntryPoint +import io.element.android.libraries.architecture.NodeInputs +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.UserId + +interface UserProfileEntryPoint : FeatureEntryPoint { + data class Params(val userId: UserId) : NodeInputs + + interface Callback : Plugin { + fun onOpenRoom(roomId: RoomId) + } + + interface NodeBuilder { + fun params(params: Params): NodeBuilder + fun callback(callback: Callback): NodeBuilder + fun build(): Node + } + + fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder +} diff --git a/features/userprofile/impl/build.gradle.kts b/features/userprofile/impl/build.gradle.kts new file mode 100644 index 0000000000..11a2cd867b --- /dev/null +++ b/features/userprofile/impl/build.gradle.kts @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + id("io.element.android-compose-library") + alias(libs.plugins.anvil) + alias(libs.plugins.ksp) + id("kotlin-parcelize") +} + +android { + namespace = "io.element.android.features.userprofile.impl" + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } +} + +anvil { + generateDaggerFactories.set(true) +} + +dependencies { + anvil(projects.anvilcodegen) + implementation(projects.anvilannotations) + + implementation(projects.libraries.core) + implementation(projects.libraries.architecture) + implementation(projects.libraries.matrix.api) + implementation(projects.libraries.matrixui) + implementation(projects.libraries.designsystem) + implementation(projects.libraries.uiStrings) + implementation(projects.libraries.androidutils) + implementation(projects.libraries.mediaviewer.api) + api(projects.features.userprofile.api) + api(projects.features.userprofile.shared) + implementation(libs.coil.compose) + implementation(projects.features.createroom.api) + implementation(projects.services.analytics.api) + + testImplementation(libs.test.junit) + testImplementation(libs.coroutines.test) + testImplementation(libs.molecule.runtime) + testImplementation(libs.test.truth) + testImplementation(libs.test.turbine) + testImplementation(libs.test.mockk) + testImplementation(libs.test.robolectric) + testImplementation(projects.libraries.matrix.test) + testImplementation(projects.features.createroom.test) + testImplementation(projects.tests.testutils) + testImplementation(libs.androidx.compose.ui.test.junit) + testReleaseImplementation(libs.androidx.compose.ui.test.manifest) + + ksp(libs.showkase.processor) +} diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt new file mode 100644 index 0000000000..0858b39deb --- /dev/null +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.impl + +import com.bumble.appyx.core.modality.BuildContext +import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.features.userprofile.api.UserProfileEntryPoint +import io.element.android.libraries.architecture.createNode +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +@ContributesBinding(AppScope::class) +class DefaultUserProfileEntryPoint @Inject constructor() : UserProfileEntryPoint { + override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): UserProfileEntryPoint.NodeBuilder { + return object : UserProfileEntryPoint.NodeBuilder { + val plugins = ArrayList() + + override fun params(params: UserProfileEntryPoint.Params): UserProfileEntryPoint.NodeBuilder { + plugins += params + return this + } + + override fun callback(callback: UserProfileEntryPoint.Callback): UserProfileEntryPoint.NodeBuilder { + plugins += callback + return this + } + + override fun build(): Node { + return parentNode.createNode(buildContext, plugins) + } + } + } +} diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt new file mode 100644 index 0000000000..c0edb2d8ea --- /dev/null +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.impl + +import android.os.Parcelable +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.bumble.appyx.core.modality.BuildContext +import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin +import com.bumble.appyx.core.plugin.plugins +import com.bumble.appyx.navmodel.backstack.BackStack +import com.bumble.appyx.navmodel.backstack.operation.push +import dagger.assisted.Assisted +import dagger.assisted.AssistedInject +import io.element.android.anvilannotations.ContributesNode +import io.element.android.features.userprofile.api.UserProfileEntryPoint +import io.element.android.features.userprofile.shared.avatar.AvatarPreviewNode +import io.element.android.features.userprofile.impl.root.UserProfileNode +import io.element.android.features.userprofile.shared.UserProfileNodeHelper +import io.element.android.libraries.architecture.BackstackView +import io.element.android.libraries.architecture.BaseFlowNode +import io.element.android.libraries.architecture.createNode +import io.element.android.libraries.architecture.inputs +import io.element.android.libraries.core.mimetype.MimeTypes +import io.element.android.libraries.di.SessionScope +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.media.MediaSource +import io.element.android.libraries.mediaviewer.api.local.MediaInfo +import io.element.android.libraries.mediaviewer.api.viewer.MediaViewerNode +import kotlinx.parcelize.Parcelize + +@ContributesNode(SessionScope::class) +class UserProfileFlowNode @AssistedInject constructor( + @Assisted buildContext: BuildContext, + @Assisted plugins: List, +) : BaseFlowNode( + backstack = BackStack( + initialElement = NavTarget.Root, + savedStateMap = buildContext.savedStateMap, + ), + buildContext = buildContext, + plugins = plugins, +) { + sealed interface NavTarget : Parcelable { + @Parcelize + data object Root : NavTarget + + @Parcelize + data class AvatarPreview(val name: String, val avatarUrl: String) : NavTarget + } + + override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { + return when (navTarget) { + NavTarget.Root -> { + val callback = object : UserProfileNodeHelper.Callback { + override fun openAvatarPreview(username: String, avatarUrl: String) { + backstack.push(NavTarget.AvatarPreview(username, avatarUrl)) + } + + override fun onStartDM(roomId: RoomId) { + plugins().forEach { it.onOpenRoom(roomId) } + } + } + val params = UserProfileNode.UserProfileInputs(userId = inputs().userId) + createNode(buildContext, listOf(callback, params)) + } + is NavTarget.AvatarPreview -> { + // We need to fake the MimeType here for the viewer to work. + val mimeType = MimeTypes.Images + val input = MediaViewerNode.Inputs( + mediaInfo = MediaInfo( + name = navTarget.name, + mimeType = mimeType, + formattedFileSize = "", + fileExtension = "" + ), + mediaSource = MediaSource(url = navTarget.avatarUrl), + thumbnailSource = null, + canDownload = false, + canShare = false, + ) + createNode(buildContext, listOf(input)) + } + } + } + + @Composable + override fun View(modifier: Modifier) { + BackstackView() + } +} diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/di/UserProfileModule.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/di/UserProfileModule.kt new file mode 100644 index 0000000000..47f0bc94cd --- /dev/null +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/di/UserProfileModule.kt @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.impl.di + +import com.squareup.anvil.annotations.ContributesTo +import dagger.Module +import dagger.Provides +import io.element.android.features.createroom.api.StartDMAction +import io.element.android.features.userprofile.impl.root.UserProfilePresenter +import io.element.android.libraries.di.SessionScope +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.UserId + +@Module +@ContributesTo(SessionScope::class) +object UserProfileModule { + @Provides + fun provideUserProfilePresenterFactory( + matrixClient: MatrixClient, + startDMAction: StartDMAction, + ): UserProfilePresenter.Factory { + return object : UserProfilePresenter.Factory { + override fun create(userId: UserId): UserProfilePresenter { + return UserProfilePresenter(userId, matrixClient, startDMAction) + } + } + } +} diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt new file mode 100644 index 0000000000..9e1dc5e873 --- /dev/null +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.impl.root + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import com.bumble.appyx.core.lifecycle.subscribe +import com.bumble.appyx.core.modality.BuildContext +import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin +import dagger.assisted.Assisted +import dagger.assisted.AssistedInject +import im.vector.app.features.analytics.plan.MobileScreen +import io.element.android.anvilannotations.ContributesNode +import io.element.android.features.userprofile.shared.UserProfileNodeHelper +import io.element.android.features.userprofile.shared.UserProfileView +import io.element.android.libraries.architecture.AsyncAction +import io.element.android.libraries.architecture.NodeInputs +import io.element.android.libraries.architecture.inputs +import io.element.android.libraries.di.SessionScope +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.permalink.PermalinkBuilder +import io.element.android.services.analytics.api.AnalyticsService + +@ContributesNode(SessionScope::class) +class UserProfileNode @AssistedInject constructor( + @Assisted buildContext: BuildContext, + @Assisted plugins: List, + private val analyticsService: AnalyticsService, + private val permalinkBuilder: PermalinkBuilder, + presenterFactory: UserProfilePresenter.Factory, +) : Node(buildContext, plugins = plugins) { + data class UserProfileInputs( + val userId: UserId + ) : NodeInputs + + private val inputs = inputs() + private val callback = inputs() + private val presenter = presenterFactory.create(inputs.userId) + private val userProfileNodeHelper = UserProfileNodeHelper(inputs.userId) + + init { + lifecycle.subscribe( + onResume = { + analyticsService.screen(MobileScreen(screenName = MobileScreen.ScreenName.User)) + } + ) + } + + @Composable + override fun View(modifier: Modifier) { + val context = LocalContext.current + + fun onShareUser() { + userProfileNodeHelper.onShareUser(context, permalinkBuilder) + } + + fun onStartDM(roomId: RoomId) { + callback.onStartDM(roomId) + } + + val state = presenter.present() + + LaunchedEffect(state.startDmActionState) { + val result = state.startDmActionState + if (result is AsyncAction.Success) { + onStartDM(result.data) + } + } + UserProfileView( + state = state, + modifier = modifier, + goBack = this::navigateUp, + onShareUser = ::onShareUser, + onDMStarted = ::onStartDM, + openAvatarPreview = callback::openAvatarPreview, + ) + } +} 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 new file mode 100644 index 0000000000..fdd2038c7f --- /dev/null +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.impl.root + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import dagger.assisted.Assisted +import dagger.assisted.AssistedInject +import io.element.android.features.createroom.api.StartDMAction +import io.element.android.features.userprofile.shared.UserProfileEvents +import io.element.android.features.userprofile.shared.UserProfilePresenterHelper +import io.element.android.features.userprofile.shared.UserProfileState +import io.element.android.features.userprofile.shared.UserProfileState.ConfirmationDialog +import io.element.android.libraries.architecture.AsyncAction +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.core.bool.orFalse +import io.element.android.libraries.matrix.api.MatrixClient +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.MatrixUser +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch + +class UserProfilePresenter @AssistedInject constructor( + @Assisted private val userId: UserId, + private val client: MatrixClient, + private val startDMAction: StartDMAction, +) : Presenter { + interface Factory { + fun create(userId: UserId): UserProfilePresenter + } + + private val userProfilePresenterHelper = UserProfilePresenterHelper( + userId = userId, + client = client, + ) + + @Composable + override fun present(): UserProfileState { + val coroutineScope = rememberCoroutineScope() + var confirmationDialog by remember { mutableStateOf(null) } + var userProfile by remember { mutableStateOf(null) } + val startDmActionState: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } + val isBlocked: MutableState> = remember { mutableStateOf(AsyncData.Uninitialized) } + LaunchedEffect(Unit) { + client.ignoredUsersFlow + .map { ignoredUsers -> userId in ignoredUsers } + .distinctUntilChanged() + .onEach { isBlocked.value = AsyncData.Success(it) } + .launchIn(this) + } + LaunchedEffect(Unit) { + userProfile = client.getProfile(userId).getOrNull() + } + + fun handleEvents(event: UserProfileEvents) { + when (event) { + is UserProfileEvents.BlockUser -> { + if (event.needsConfirmation) { + confirmationDialog = ConfirmationDialog.Block + } else { + confirmationDialog = null + userProfilePresenterHelper.blockUser(coroutineScope, isBlocked) + } + } + is UserProfileEvents.UnblockUser -> { + if (event.needsConfirmation) { + confirmationDialog = ConfirmationDialog.Unblock + } else { + confirmationDialog = null + userProfilePresenterHelper.unblockUser(coroutineScope, isBlocked) + } + } + UserProfileEvents.ClearConfirmationDialog -> confirmationDialog = null + UserProfileEvents.ClearBlockUserError -> { + isBlocked.value = AsyncData.Success(isBlocked.value.dataOrNull().orFalse()) + } + UserProfileEvents.StartDM -> { + coroutineScope.launch { + startDMAction.execute(userId, startDmActionState) + } + } + UserProfileEvents.ClearStartDMState -> { + startDmActionState.value = AsyncAction.Uninitialized + } + } + } + + return UserProfileState( + userId = userId, + userName = userProfile?.displayName, + avatarUrl = userProfile?.avatarUrl, + isBlocked = isBlocked.value, + startDmActionState = startDmActionState.value, + displayConfirmationDialog = confirmationDialog, + isCurrentUser = client.isMe(userId), + eventSink = ::handleEvents + ) + } +} diff --git a/features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/UserProfilePresenterTests.kt b/features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/UserProfilePresenterTests.kt new file mode 100644 index 0000000000..f0d5955ce9 --- /dev/null +++ b/features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/UserProfilePresenterTests.kt @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.impl + +import app.cash.molecule.RecompositionMode +import app.cash.molecule.moleculeFlow +import app.cash.turbine.ReceiveTurbine +import app.cash.turbine.test +import com.google.common.truth.Truth.assertThat +import io.element.android.features.createroom.api.StartDMAction +import io.element.android.features.createroom.test.FakeStartDMAction +import io.element.android.features.userprofile.impl.root.UserProfilePresenter +import io.element.android.features.userprofile.shared.UserProfileEvents +import io.element.android.features.userprofile.shared.UserProfileState +import io.element.android.libraries.architecture.AsyncAction +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.test.AN_EXCEPTION +import io.element.android.libraries.matrix.test.A_ROOM_ID +import io.element.android.libraries.matrix.test.A_THROWABLE +import io.element.android.libraries.matrix.test.A_USER_ID +import io.element.android.libraries.matrix.test.FakeMatrixClient +import io.element.android.libraries.matrix.ui.components.aMatrixUser +import io.element.android.tests.testutils.WarmUpRule +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runTest +import org.junit.Rule +import org.junit.Test + +@ExperimentalCoroutinesApi +class UserProfilePresenterTests { + @get:Rule + val warmUpRule = WarmUpRule() + + @Test + fun `present - returns the user profile data`() = runTest { + val matrixUser = aMatrixUser(A_USER_ID.value, "Alice", "anAvatarUrl") + val client = FakeMatrixClient().apply { + givenGetProfileResult(A_USER_ID, Result.success(matrixUser)) + } + val presenter = createUserProfilePresenter( + client = client, + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + assertThat(initialState.userId).isEqualTo(matrixUser.userId) + assertThat(initialState.userName).isEqualTo(matrixUser.displayName) + assertThat(initialState.avatarUrl).isEqualTo(matrixUser.avatarUrl) + assertThat(initialState.isBlocked).isEqualTo(AsyncData.Success(false)) + } + } + + @Test + fun `present - returns empty data in case of failure`() = runTest { + val client = FakeMatrixClient().apply { + givenGetProfileResult(A_USER_ID, Result.failure(AN_EXCEPTION)) + } + val presenter = createUserProfilePresenter( + client = client, + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + assertThat(initialState.userId).isEqualTo(A_USER_ID) + assertThat(initialState.userName).isNull() + assertThat(initialState.avatarUrl).isNull() + assertThat(initialState.isBlocked).isEqualTo(AsyncData.Success(false)) + } + } + + @Test + fun `present - BlockUser needing confirmation displays confirmation dialog`() = runTest { + val presenter = createUserProfilePresenter() + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink(UserProfileEvents.BlockUser(needsConfirmation = true)) + + val dialogState = awaitItem() + assertThat(dialogState.displayConfirmationDialog).isEqualTo(UserProfileState.ConfirmationDialog.Block) + + dialogState.eventSink(UserProfileEvents.ClearConfirmationDialog) + assertThat(awaitItem().displayConfirmationDialog).isNull() + + ensureAllEventsConsumed() + } + } + + @Test + fun `present - BlockUser and UnblockUser without confirmation change the 'blocked' state`() = runTest { + val client = FakeMatrixClient() + val presenter = createUserProfilePresenter( + client = client, + userId = A_USER_ID + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink(UserProfileEvents.BlockUser(needsConfirmation = false)) + assertThat(awaitItem().isBlocked.isLoading()).isTrue() + client.emitIgnoreUserList(listOf(A_USER_ID)) + assertThat(awaitItem().isBlocked.dataOrNull()).isTrue() + + initialState.eventSink(UserProfileEvents.UnblockUser(needsConfirmation = false)) + assertThat(awaitItem().isBlocked.isLoading()).isTrue() + client.emitIgnoreUserList(listOf()) + assertThat(awaitItem().isBlocked.dataOrNull()).isFalse() + } + } + + @Test + fun `present - BlockUser with error`() = runTest { + val matrixClient = FakeMatrixClient() + matrixClient.givenIgnoreUserResult(Result.failure(A_THROWABLE)) + val presenter = createUserProfilePresenter(client = matrixClient) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink(UserProfileEvents.BlockUser(needsConfirmation = false)) + assertThat(awaitItem().isBlocked.isLoading()).isTrue() + val errorState = awaitItem() + assertThat(errorState.isBlocked.errorOrNull()).isEqualTo(A_THROWABLE) + // Clear error + initialState.eventSink(UserProfileEvents.ClearBlockUserError) + assertThat(awaitItem().isBlocked).isEqualTo(AsyncData.Success(false)) + } + } + + @Test + fun `present - UnblockUser with error`() = runTest { + val matrixClient = FakeMatrixClient() + matrixClient.givenUnignoreUserResult(Result.failure(A_THROWABLE)) + val presenter = createUserProfilePresenter(client = matrixClient) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink(UserProfileEvents.UnblockUser(needsConfirmation = false)) + assertThat(awaitItem().isBlocked.isLoading()).isTrue() + val errorState = awaitItem() + assertThat(errorState.isBlocked.errorOrNull()).isEqualTo(A_THROWABLE) + // Clear error + initialState.eventSink(UserProfileEvents.ClearBlockUserError) + assertThat(awaitItem().isBlocked).isEqualTo(AsyncData.Success(true)) + } + } + + @Test + fun `present - UnblockUser needing confirmation displays confirmation dialog`() = runTest { + val presenter = createUserProfilePresenter() + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + initialState.eventSink(UserProfileEvents.UnblockUser(needsConfirmation = true)) + + val dialogState = awaitItem() + assertThat(dialogState.displayConfirmationDialog).isEqualTo(UserProfileState.ConfirmationDialog.Unblock) + + dialogState.eventSink(UserProfileEvents.ClearConfirmationDialog) + assertThat(awaitItem().displayConfirmationDialog).isNull() + + ensureAllEventsConsumed() + } + } + + @Test + fun `present - start DM action complete scenario`() = runTest { + val startDMAction = FakeStartDMAction() + val presenter = createUserProfilePresenter(startDMAction = startDMAction) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitFirstItem() + assertThat(initialState.startDmActionState).isInstanceOf(AsyncAction.Uninitialized::class.java) + val startDMSuccessResult = AsyncAction.Success(A_ROOM_ID) + val startDMFailureResult = AsyncAction.Failure(A_THROWABLE) + + // Failure + startDMAction.givenExecuteResult(startDMFailureResult) + initialState.eventSink(UserProfileEvents.StartDM) + assertThat(awaitItem().startDmActionState).isInstanceOf(AsyncAction.Loading::class.java) + awaitItem().also { state -> + assertThat(state.startDmActionState).isEqualTo(startDMFailureResult) + state.eventSink(UserProfileEvents.ClearStartDMState) + } + + // Success + startDMAction.givenExecuteResult(startDMSuccessResult) + awaitItem().also { state -> + assertThat(state.startDmActionState).isEqualTo(AsyncAction.Uninitialized) + state.eventSink(UserProfileEvents.StartDM) + } + assertThat(awaitItem().startDmActionState).isInstanceOf(AsyncAction.Loading::class.java) + awaitItem().also { state -> + assertThat(state.startDmActionState).isEqualTo(startDMSuccessResult) + } + } + } + + private suspend fun ReceiveTurbine.awaitFirstItem(): T { + skipItems(1) + return awaitItem() + } + + private fun createUserProfilePresenter( + client: MatrixClient = FakeMatrixClient(), + userId: UserId = UserId("@alice:server.org"), + startDMAction: StartDMAction = FakeStartDMAction() + ): UserProfilePresenter { + return UserProfilePresenter( + userId = userId, + client = client, + startDMAction = startDMAction + ) + } +} diff --git a/features/userprofile/shared/build.gradle.kts b/features/userprofile/shared/build.gradle.kts new file mode 100644 index 0000000000..2407770ed4 --- /dev/null +++ b/features/userprofile/shared/build.gradle.kts @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + id("io.element.android-compose-library") + alias(libs.plugins.anvil) + alias(libs.plugins.ksp) + id("kotlin-parcelize") +} + +android { + namespace = "io.element.android.features.userprofile.shared" + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } +} + +anvil { + generateDaggerFactories.set(true) +} + +dependencies { + anvil(projects.anvilcodegen) + implementation(projects.anvilannotations) + + implementation(projects.libraries.core) + implementation(projects.libraries.architecture) + implementation(projects.libraries.matrix.api) + implementation(projects.libraries.matrixui) + implementation(projects.libraries.designsystem) + implementation(projects.libraries.uiStrings) + implementation(projects.libraries.androidutils) + implementation(projects.libraries.mediaviewer.api) + implementation(projects.libraries.featureflag.api) + implementation(projects.libraries.permissions.api) + implementation(projects.libraries.preferences.api) + implementation(projects.libraries.testtags) + api(projects.features.userprofile.api) + api(projects.services.apperror.api) + implementation(libs.coil.compose) + implementation(projects.features.createroom.api) + implementation(projects.services.analytics.api) + + testImplementation(libs.test.junit) + testImplementation(libs.coroutines.test) + testImplementation(libs.molecule.runtime) + testImplementation(libs.test.truth) + testImplementation(libs.test.turbine) + testImplementation(libs.test.robolectric) + testImplementation(projects.libraries.matrix.test) + testImplementation(projects.tests.testutils) + testImplementation(libs.androidx.compose.ui.test.junit) + testReleaseImplementation(libs.androidx.compose.ui.test.manifest) + + ksp(libs.showkase.processor) +} diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsEvents.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileEvents.kt similarity index 61% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsEvents.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileEvents.kt index 75c66f26e2..447b04c9c1 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsEvents.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileEvents.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,13 +14,13 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.members.details +package io.element.android.features.userprofile.shared -sealed interface RoomMemberDetailsEvents { - data object StartDM : RoomMemberDetailsEvents - data object ClearStartDMState : RoomMemberDetailsEvents - data class BlockUser(val needsConfirmation: Boolean = false) : RoomMemberDetailsEvents - data class UnblockUser(val needsConfirmation: Boolean = false) : RoomMemberDetailsEvents - data object ClearBlockUserError : RoomMemberDetailsEvents - data object ClearConfirmationDialog : RoomMemberDetailsEvents +sealed interface UserProfileEvents { + data object StartDM : UserProfileEvents + data object ClearStartDMState : UserProfileEvents + data class BlockUser(val needsConfirmation: Boolean = false) : UserProfileEvents + data class UnblockUser(val needsConfirmation: Boolean = false) : UserProfileEvents + data object ClearBlockUserError : UserProfileEvents + data object ClearConfirmationDialog : UserProfileEvents } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberHeaderSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt similarity index 89% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberHeaderSection.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt index 5e6ed6a7e7..23241bbcc2 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberHeaderSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.members.details +package io.element.android.features.userprofile.shared import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -37,13 +37,14 @@ import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.testTag @Composable -fun RoomMemberHeaderSection( +fun UserProfileHeaderSection( avatarUrl: String?, - userId: String, + userId: UserId, userName: String?, openAvatarPreview: (url: String) -> Unit, modifier: Modifier = Modifier @@ -51,7 +52,7 @@ fun RoomMemberHeaderSection( Column(modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { Box(modifier = Modifier.size(70.dp)) { Avatar( - avatarData = AvatarData(userId, userName, avatarUrl, AvatarSize.UserHeader), + avatarData = AvatarData(userId.value, userName, avatarUrl, AvatarSize.UserHeader), modifier = Modifier .clickable(enabled = avatarUrl != null) { openAvatarPreview(avatarUrl!!) } .fillMaxSize() @@ -68,7 +69,7 @@ fun RoomMemberHeaderSection( Spacer(modifier = Modifier.height(6.dp)) } Text( - text = userId, + text = userId.value, style = ElementTheme.typography.fontBodyLgRegular, color = MaterialTheme.colorScheme.secondary, modifier = Modifier diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberMainActionsSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt similarity index 87% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberMainActionsSection.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt index afa4651c66..bedcc2160c 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberMainActionsSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.members.details +package io.element.android.features.userprofile.shared import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -27,7 +27,7 @@ import io.element.android.libraries.designsystem.components.button.MainActionBut import io.element.android.libraries.ui.strings.CommonStrings @Composable -fun RoomMemberMainActionsSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) { +fun UserProfileMainActionsSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) { MainActionButton( title = stringResource(CommonStrings.action_share), diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileNodeHelper.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileNodeHelper.kt new file mode 100644 index 0000000000..60afcae25b --- /dev/null +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileNodeHelper.kt @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.shared + +import android.content.Context +import io.element.android.libraries.androidutils.R +import io.element.android.libraries.androidutils.system.startSharePlainTextIntent +import io.element.android.libraries.architecture.NodeInputs +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.permalink.PermalinkBuilder +import io.element.android.libraries.ui.strings.CommonStrings +import timber.log.Timber + +class UserProfileNodeHelper( + private val userId: UserId, +) { + interface Callback : NodeInputs { + fun openAvatarPreview(username: String, avatarUrl: String) + fun onStartDM(roomId: RoomId) + } + + fun onShareUser( + context: Context, + permalinkBuilder: PermalinkBuilder, + ) { + val permalinkResult = permalinkBuilder.permalinkForUser(userId) + permalinkResult.onSuccess { permalink -> + context.startSharePlainTextIntent( + activityResultLauncher = null, + chooserTitle = context.getString(CommonStrings.action_share), + text = permalink, + noActivityFoundMessage = context.getString(R.string.error_no_compatible_app_found) + ) + }.onFailure { + Timber.e(it) + } + } +} diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfilePresenterHelper.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfilePresenterHelper.kt new file mode 100644 index 0000000000..df40a35432 --- /dev/null +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfilePresenterHelper.kt @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile.shared + +import androidx.compose.runtime.MutableState +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.UserId +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +class UserProfilePresenterHelper( + private val userId: UserId, + private val client: MatrixClient, +) { + fun blockUser( + scope: CoroutineScope, + isBlockedState: MutableState>, + ) = scope.launch { + isBlockedState.value = AsyncData.Loading(false) + client.ignoreUser(userId) + .onFailure { + isBlockedState.value = AsyncData.Failure(it, false) + } + // Note: on success, ignoredUserList will be updated. + } + + fun unblockUser( + scope: CoroutineScope, + isBlockedState: MutableState>, + ) = scope.launch { + isBlockedState.value = AsyncData.Loading(true) + client.unignoreUser(userId) + .onFailure { + isBlockedState.value = AsyncData.Failure(it, true) + } + // Note: on success, ignoredUserList will be updated. + } +} diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsState.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileState.kt similarity index 80% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsState.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileState.kt index 535ab79280..e36edd36c0 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsState.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileState.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,21 +14,22 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.members.details +package io.element.android.features.userprofile.shared import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.UserId -data class RoomMemberDetailsState( - val userId: String, +data class UserProfileState( + val userId: UserId, val userName: String?, val avatarUrl: String?, val isBlocked: AsyncData, val startDmActionState: AsyncAction, val displayConfirmationDialog: ConfirmationDialog?, val isCurrentUser: Boolean, - val eventSink: (RoomMemberDetailsEvents) -> Unit + val eventSink: (UserProfileEvents) -> Unit ) { enum class ConfirmationDialog { Block, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsStateProvider.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileStateProvider.kt similarity index 57% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsStateProvider.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileStateProvider.kt index dfc208e047..8892c60851 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsStateProvider.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileStateProvider.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,37 +14,38 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.members.details +package io.element.android.features.userprofile.shared import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.UserId -open class RoomMemberDetailsStateProvider : PreviewParameterProvider { - override val values: Sequence +open class UserProfileStateProvider : PreviewParameterProvider { + override val values: Sequence get() = sequenceOf( - aRoomMemberDetailsState(), - aRoomMemberDetailsState(userName = null), - aRoomMemberDetailsState(isBlocked = AsyncData.Success(true)), - aRoomMemberDetailsState(displayConfirmationDialog = RoomMemberDetailsState.ConfirmationDialog.Block), - aRoomMemberDetailsState(displayConfirmationDialog = RoomMemberDetailsState.ConfirmationDialog.Unblock), - aRoomMemberDetailsState(isBlocked = AsyncData.Loading(true)), - aRoomMemberDetailsState(startDmActionState = AsyncAction.Loading), + aUserProfileState(), + aUserProfileState(userName = null), + aUserProfileState(isBlocked = AsyncData.Success(true)), + aUserProfileState(displayConfirmationDialog = UserProfileState.ConfirmationDialog.Block), + aUserProfileState(displayConfirmationDialog = UserProfileState.ConfirmationDialog.Unblock), + aUserProfileState(isBlocked = AsyncData.Loading(true)), + aUserProfileState(startDmActionState = AsyncAction.Loading), // Add other states here ) } -fun aRoomMemberDetailsState( - userId: String = "@daniel:domain.com", +fun aUserProfileState( + userId: UserId = UserId("@daniel:domain.com"), userName: String? = "Daniel", avatarUrl: String? = null, isBlocked: AsyncData = AsyncData.Success(false), startDmActionState: AsyncAction = AsyncAction.Uninitialized, - displayConfirmationDialog: RoomMemberDetailsState.ConfirmationDialog? = null, + displayConfirmationDialog: UserProfileState.ConfirmationDialog? = null, isCurrentUser: Boolean = false, - eventSink: (RoomMemberDetailsEvents) -> Unit = {}, -) = RoomMemberDetailsState( + eventSink: (UserProfileEvents) -> Unit = {}, +) = UserProfileState( userId = userId, userName = userName, avatarUrl = avatarUrl, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsView.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileView.kt similarity index 75% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsView.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileView.kt index 01f3ca2ea0..fcc1f1debc 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsView.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileView.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.members.details +package io.element.android.features.userprofile.shared import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -30,17 +30,14 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.tokens.generated.CompoundIcons -import io.element.android.features.roomdetails.impl.R -import io.element.android.features.roomdetails.impl.blockuser.BlockUserDialogs -import io.element.android.features.roomdetails.impl.blockuser.BlockUserSection -import io.element.android.libraries.architecture.coverage.ExcludeFromCoverage +import io.element.android.features.userprofile.shared.blockuser.BlockUserDialogs +import io.element.android.features.userprofile.shared.blockuser.BlockUserSection import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.list.ListItemContent -import io.element.android.libraries.designsystem.preview.ElementPreviewDark -import io.element.android.libraries.designsystem.preview.ElementPreviewLight -import io.element.android.libraries.designsystem.preview.PreviewWithLargeHeight +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.IconSource import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.ListItemStyle @@ -52,8 +49,8 @@ import io.element.android.libraries.ui.strings.CommonStrings @OptIn(ExperimentalMaterial3Api::class) @Composable -fun RoomMemberDetailsView( - state: RoomMemberDetailsState, +fun UserProfileView( + state: UserProfileState, onShareUser: () -> Unit, onDMStarted: (RoomId) -> Unit, goBack: () -> Unit, @@ -72,21 +69,21 @@ fun RoomMemberDetailsView( .consumeWindowInsets(padding) .verticalScroll(rememberScrollState()) ) { - RoomMemberHeaderSection( + UserProfileHeaderSection( avatarUrl = state.avatarUrl, userId = state.userId, userName = state.userName, openAvatarPreview = { avatarUrl -> - openAvatarPreview(state.userName ?: state.userId, avatarUrl) + openAvatarPreview(state.userName ?: state.userId.value, avatarUrl) }, ) - RoomMemberMainActionsSection(onShareUser = onShareUser) + UserProfileMainActionsSection(onShareUser = onShareUser) Spacer(modifier = Modifier.height(26.dp)) if (!state.isCurrentUser) { - StartDMSection(onStartDMClicked = { state.eventSink(RoomMemberDetailsEvents.StartDM) }) + StartDMSection(onStartDMClicked = { state.eventSink(UserProfileEvents.StartDM) }) BlockUserSection(state) BlockUserDialogs(state) } @@ -99,8 +96,8 @@ fun RoomMemberDetailsView( }, onSuccess = onDMStarted, errorMessage = { stringResource(R.string.screen_start_chat_error_starting_chat) }, - onRetry = { state.eventSink(RoomMemberDetailsEvents.StartDM) }, - onErrorDismiss = { state.eventSink(RoomMemberDetailsEvents.ClearStartDMState) }, + onRetry = { state.eventSink(UserProfileEvents.StartDM) }, + onErrorDismiss = { state.eventSink(UserProfileEvents.ClearStartDMState) }, ) } } @@ -118,20 +115,12 @@ private fun StartDMSection( ) } -@PreviewWithLargeHeight +@PreviewsDayNight @Composable -internal fun RoomMemberDetailsViewLightPreview(@PreviewParameter(RoomMemberDetailsStateProvider::class) state: RoomMemberDetailsState) = - ElementPreviewLight { ContentToPreview(state) } - -@PreviewWithLargeHeight -@Composable -internal fun RoomMemberDetailsViewDarkPreview(@PreviewParameter(RoomMemberDetailsStateProvider::class) state: RoomMemberDetailsState) = - ElementPreviewDark { ContentToPreview(state) } - -@ExcludeFromCoverage -@Composable -private fun ContentToPreview(state: RoomMemberDetailsState) { - RoomMemberDetailsView( +internal fun UserProfileViewPreview( + @PreviewParameter(UserProfileStateProvider::class) state: UserProfileState +) = ElementPreview { + UserProfileView( state = state, onShareUser = {}, goBack = {}, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/avatar/AvatarPreviewNode.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/avatar/AvatarPreviewNode.kt similarity index 85% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/avatar/AvatarPreviewNode.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/avatar/AvatarPreviewNode.kt index ecd2806b88..fc736dc425 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/avatar/AvatarPreviewNode.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/avatar/AvatarPreviewNode.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,18 +14,18 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.members.details.avatar +package io.element.android.features.userprofile.shared.avatar import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.plugin.Plugin import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode -import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.di.SessionScope import io.element.android.libraries.mediaviewer.api.viewer.MediaViewerNode import io.element.android.libraries.mediaviewer.api.viewer.MediaViewerPresenter -@ContributesNode(RoomScope::class) +@ContributesNode(SessionScope::class) class AvatarPreviewNode @AssistedInject constructor( @Assisted buildContext: BuildContext, @Assisted plugins: List, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserDialogs.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserDialogs.kt similarity index 73% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserDialogs.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserDialogs.kt index be25a6228f..3e7aeff512 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserDialogs.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserDialogs.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,41 +14,41 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.blockuser +package io.element.android.features.userprofile.shared.blockuser import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource -import io.element.android.features.roomdetails.impl.R -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsEvents -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState +import io.element.android.features.userprofile.shared.R +import io.element.android.features.userprofile.shared.UserProfileEvents +import io.element.android.features.userprofile.shared.UserProfileState import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog @Composable -fun BlockUserDialogs(state: RoomMemberDetailsState) { +fun BlockUserDialogs(state: UserProfileState) { when (state.displayConfirmationDialog) { null -> Unit - RoomMemberDetailsState.ConfirmationDialog.Block -> { + UserProfileState.ConfirmationDialog.Block -> { BlockConfirmationDialog( onBlockAction = { state.eventSink( - RoomMemberDetailsEvents.BlockUser( + UserProfileEvents.BlockUser( needsConfirmation = false ) ) }, - onDismiss = { state.eventSink(RoomMemberDetailsEvents.ClearConfirmationDialog) } + onDismiss = { state.eventSink(UserProfileEvents.ClearConfirmationDialog) } ) } - RoomMemberDetailsState.ConfirmationDialog.Unblock -> { + UserProfileState.ConfirmationDialog.Unblock -> { UnblockConfirmationDialog( onUnblockAction = { state.eventSink( - RoomMemberDetailsEvents.UnblockUser( + UserProfileEvents.UnblockUser( needsConfirmation = false ) ) }, - onDismiss = { state.eventSink(RoomMemberDetailsEvents.ClearConfirmationDialog) } + onDismiss = { state.eventSink(UserProfileEvents.ClearConfirmationDialog) } ) } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserSection.kt similarity index 77% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserSection.kt rename to features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserSection.kt index a35df8cdcf..6ad1bf8484 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserSection.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 New Vector Ltd + * Copyright (c) 2024 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.blockuser +package io.element.android.features.userprofile.shared.blockuser import androidx.compose.foundation.layout.size import androidx.compose.foundation.progressSemantics @@ -23,9 +23,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import io.element.android.compound.tokens.generated.CompoundIcons -import io.element.android.features.roomdetails.impl.R -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsEvents -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState +import io.element.android.features.userprofile.shared.R +import io.element.android.features.userprofile.shared.UserProfileEvents +import io.element.android.features.userprofile.shared.UserProfileState import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.designsystem.components.dialogs.RetryDialog @@ -39,8 +39,14 @@ import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.ui.strings.CommonStrings @Composable -internal fun BlockUserSection(state: RoomMemberDetailsState) { - PreferenceCategory(showDivider = false) { +fun BlockUserSection( + state: UserProfileState, + modifier: Modifier = Modifier, +) { + PreferenceCategory( + modifier = modifier, + showDivider = false, + ) { when (state.isBlocked) { is AsyncData.Failure -> PreferenceBlockUser(isBlocked = state.isBlocked.prevData, isLoading = false, eventSink = state.eventSink) is AsyncData.Loading -> PreferenceBlockUser(isBlocked = state.isBlocked.prevData, isLoading = true, eventSink = state.eventSink) @@ -51,13 +57,13 @@ internal fun BlockUserSection(state: RoomMemberDetailsState) { if (state.isBlocked is AsyncData.Failure) { RetryDialog( content = stringResource(CommonStrings.error_unknown), - onDismiss = { state.eventSink(RoomMemberDetailsEvents.ClearBlockUserError) }, + onDismiss = { state.eventSink(UserProfileEvents.ClearBlockUserError) }, onRetry = { val event = when (state.isBlocked.prevData) { - true -> RoomMemberDetailsEvents.UnblockUser(needsConfirmation = false) - false -> RoomMemberDetailsEvents.BlockUser(needsConfirmation = false) + true -> UserProfileEvents.UnblockUser(needsConfirmation = false) + false -> UserProfileEvents.BlockUser(needsConfirmation = false) // null case Should not happen - null -> RoomMemberDetailsEvents.ClearBlockUserError + null -> UserProfileEvents.ClearBlockUserError } state.eventSink(event) }, @@ -69,7 +75,7 @@ internal fun BlockUserSection(state: RoomMemberDetailsState) { private fun PreferenceBlockUser( isBlocked: Boolean?, isLoading: Boolean, - eventSink: (RoomMemberDetailsEvents) -> Unit, + eventSink: (UserProfileEvents) -> Unit, ) { val loadingCurrentValue = @Composable { CircularProgressIndicator( @@ -83,7 +89,7 @@ private fun PreferenceBlockUser( ListItem( headlineContent = { Text(stringResource(R.string.screen_dm_details_unblock_user)) }, leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Block())), - onClick = { if (!isLoading) eventSink(RoomMemberDetailsEvents.UnblockUser(needsConfirmation = true)) }, + onClick = { if (!isLoading) eventSink(UserProfileEvents.UnblockUser(needsConfirmation = true)) }, trailingContent = if (isLoading) ListItemContent.Custom(loadingCurrentValue) else null, style = ListItemStyle.Primary, ) @@ -92,7 +98,7 @@ private fun PreferenceBlockUser( headlineContent = { Text(stringResource(R.string.screen_dm_details_block_user)) }, leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Block())), style = ListItemStyle.Destructive, - onClick = { if (!isLoading) eventSink(RoomMemberDetailsEvents.BlockUser(needsConfirmation = true)) }, + onClick = { if (!isLoading) eventSink(UserProfileEvents.BlockUser(needsConfirmation = true)) }, trailingContent = if (isLoading) ListItemContent.Custom(loadingCurrentValue) else null, ) } diff --git a/features/userprofile/shared/src/main/res/values-be/translations.xml b/features/userprofile/shared/src/main/res/values-be/translations.xml new file mode 100644 index 0000000000..3e5b95d74c --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-be/translations.xml @@ -0,0 +1,10 @@ + + + "Заблакіраваць" + "Заблакіраваныя карыстальнікі не змогуць адпраўляць вам паведамленні, і ўсе іх паведамленні будуць схаваны. Вы можаце разблакіраваць іх у любы час." + "Заблакіраваць карыстальніка" + "Разблакіраваць" + "Вы зноў зможаце ўбачыць усе паведамленні." + "Разблакіраваць карыстальніка" + "Пры спробе пачаць чат адбылася памылка" + diff --git a/features/userprofile/shared/src/main/res/values-bg/translations.xml b/features/userprofile/shared/src/main/res/values-bg/translations.xml new file mode 100644 index 0000000000..96b7bf7f56 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-bg/translations.xml @@ -0,0 +1,7 @@ + + + "Блокиране" + "Блокиране на потребителя" + "Отблокиране" + "Отблокиране на потребителя" + diff --git a/features/userprofile/shared/src/main/res/values-cs/translations.xml b/features/userprofile/shared/src/main/res/values-cs/translations.xml new file mode 100644 index 0000000000..541954b8b8 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-cs/translations.xml @@ -0,0 +1,10 @@ + + + "Zablokovat" + "Blokovaní uživatelé vám nebudou moci posílat zprávy a všechny jejich zprávy budou skryty. Můžete je kdykoli odblokovat." + "Zablokovat uživatele" + "Odblokovat" + "Znovu uvidíte všechny zprávy od nich." + "Odblokovat uživatele" + "Při pokusu o zahájení chatu došlo k chybě" + diff --git a/features/userprofile/shared/src/main/res/values-de/translations.xml b/features/userprofile/shared/src/main/res/values-de/translations.xml new file mode 100644 index 0000000000..02f7517401 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-de/translations.xml @@ -0,0 +1,10 @@ + + + "Blockieren" + "Blockierte Benutzer können Dir keine Nachrichten senden und alle ihre alten Nachrichten werden ausgeblendet. Die Blockierung kann jederzeit aufgehoben werden." + "Benutzer blockieren" + "Blockierung aufheben" + "Der Nutzer kann dir wieder Nachrichten senden & alle Nachrichten des Nutzers werden wieder angezeigt." + "Blockierung aufheben" + "Beim Versuch, einen Chat zu starten, ist ein Fehler aufgetreten" + diff --git a/features/userprofile/shared/src/main/res/values-es/translations.xml b/features/userprofile/shared/src/main/res/values-es/translations.xml new file mode 100644 index 0000000000..ffe33a333a --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-es/translations.xml @@ -0,0 +1,10 @@ + + + "Bloquear" + "Los usuarios bloqueados no podrán enviarte mensajes y todos sus mensajes se ocultarán. Puedes desbloquearlos cuando quieras." + "Bloquear usuario" + "Desbloquear" + "Podrás ver todos sus mensajes de nuevo." + "Desbloquear usuario" + "Se ha producido un error al intentar iniciar un chat" + diff --git a/features/userprofile/shared/src/main/res/values-fr/translations.xml b/features/userprofile/shared/src/main/res/values-fr/translations.xml new file mode 100644 index 0000000000..0238cacbc4 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-fr/translations.xml @@ -0,0 +1,10 @@ + + + "Bloquer" + "Les utilisateurs bloqués ne pourront pas vous envoyer de messages et tous leurs messages seront masqués. Vous pouvez les débloquer à tout moment." + "Bloquer l’utilisateur" + "Débloquer" + "Vous pourrez à nouveau voir tous ses messages." + "Débloquer l’utilisateur" + "Une erreur s’est produite lors de la tentative de création de la discussion" + diff --git a/features/userprofile/shared/src/main/res/values-hu/translations.xml b/features/userprofile/shared/src/main/res/values-hu/translations.xml new file mode 100644 index 0000000000..9b491d557b --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-hu/translations.xml @@ -0,0 +1,10 @@ + + + "Letiltás" + "A letiltott felhasználók nem fognak tudni üzeneteket küldeni, és az összes üzenetük rejtve lesz. Bármikor feloldhatja a letiltásukat." + "Felhasználó letiltása" + "Letiltás feloldása" + "Újra láthatja az összes üzenetét." + "Felhasználó kitiltásának feloldása" + "Hiba történt a csevegés indításakor" + diff --git a/features/userprofile/shared/src/main/res/values-it/translations.xml b/features/userprofile/shared/src/main/res/values-it/translations.xml new file mode 100644 index 0000000000..e123113da6 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-it/translations.xml @@ -0,0 +1,10 @@ + + + "Blocca" + "Gli utenti bloccati non saranno in grado di inviarti messaggi e tutti quelli già ricevuti saranno nascosti. Puoi sbloccarli in qualsiasi momento." + "Blocca utente" + "Sblocca" + "Potrai vedere di nuovo tutti i suoi messaggi." + "Sblocca utente" + "Si è verificato un errore durante il tentativo di avviare una chat" + diff --git a/features/userprofile/shared/src/main/res/values-ro/translations.xml b/features/userprofile/shared/src/main/res/values-ro/translations.xml new file mode 100644 index 0000000000..0922bbebd6 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-ro/translations.xml @@ -0,0 +1,10 @@ + + + "Blocați" + "Utilizatorii blocați nu vă vor putea trimite mesaje și toate mesajele lor vor fi ascunse. Puteți anula această acțiune oricând." + "Blocați utilizatorul" + "Deblocați" + "La deblocarea utilizatorului, veți putea vedea din nou toate mesajele de la acesta." + "Deblocați utilizatorul" + "A apărut o eroare la încercarea începerii conversației" + diff --git a/features/userprofile/shared/src/main/res/values-ru/translations.xml b/features/userprofile/shared/src/main/res/values-ru/translations.xml new file mode 100644 index 0000000000..665ee4207f --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-ru/translations.xml @@ -0,0 +1,10 @@ + + + "Заблокировать" + "Заблокированные пользователи не смогут отправлять вам сообщения, а все их сообщения будут скрыты. Вы можете разблокировать их в любое время." + "Заблокировать пользователя" + "Разблокировать" + "Вы снова сможете увидеть все сообщения." + "Разблокировать пользователя" + "Произошла ошибка при попытке открытия комнаты" + diff --git a/features/userprofile/shared/src/main/res/values-sk/translations.xml b/features/userprofile/shared/src/main/res/values-sk/translations.xml new file mode 100644 index 0000000000..01c2dffa42 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-sk/translations.xml @@ -0,0 +1,10 @@ + + + "Zablokovať" + "Blokovaní používatelia vám nebudú môcť posielať správy a všetky ich správy budú skryté. Môžete ich kedykoľvek odblokovať." + "Zablokovať používateľa" + "Odblokovať" + "Všetky správy od nich budete môcť opäť vidieť." + "Odblokovať používateľa" + "Pri pokuse o spustenie konverzácie sa vyskytla chyba" + diff --git a/features/userprofile/shared/src/main/res/values-sv/translations.xml b/features/userprofile/shared/src/main/res/values-sv/translations.xml new file mode 100644 index 0000000000..6f2c9568c1 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-sv/translations.xml @@ -0,0 +1,10 @@ + + + "Blockera" + "Blockerade användare kommer inte att kunna skicka meddelanden till dig och alla deras meddelanden kommer att döljas. Du kan avblockera dem när som helst." + "Blockera användare" + "Avblockera" + "Du kommer att kunna se alla meddelanden från dem igen." + "Avblockera användare" + "Ett fel uppstod när du försökte starta en chatt" + diff --git a/features/userprofile/shared/src/main/res/values-uk/translations.xml b/features/userprofile/shared/src/main/res/values-uk/translations.xml new file mode 100644 index 0000000000..63bc66bb0f --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-uk/translations.xml @@ -0,0 +1,10 @@ + + + "Заблокувати" + "Заблоковані користувачі не зможуть надсилати Вам повідомлення, і всі їхні повідомлення будуть приховані. Ви можете розблокувати їх у будь-який час." + "Заблокувати користувача" + "Розблокувати" + "Ви знову зможете бачити всі повідомлення від них." + "Розблокувати користувача" + "Під час спроби почати чат сталася помилка" + diff --git a/features/userprofile/shared/src/main/res/values-zh-rTW/translations.xml b/features/userprofile/shared/src/main/res/values-zh-rTW/translations.xml new file mode 100644 index 0000000000..ee42766639 --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-zh-rTW/translations.xml @@ -0,0 +1,7 @@ + + + "封鎖" + "封鎖使用者" + "解除封鎖" + "解除封鎖使用者" + diff --git a/features/userprofile/shared/src/main/res/values/localazy.xml b/features/userprofile/shared/src/main/res/values/localazy.xml new file mode 100644 index 0000000000..e73c16fe4e --- /dev/null +++ b/features/userprofile/shared/src/main/res/values/localazy.xml @@ -0,0 +1,10 @@ + + + "Block" + "Blocked users won\'t be able to send you messages and all their messages will be hidden. You can unblock them anytime." + "Block user" + "Unblock" + "You\'ll be able to see all messages from them again." + "Unblock user" + "An error occurred when trying to start a chat" + diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserDialogsTest.kt b/features/userprofile/shared/src/test/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserDialogsTest.kt similarity index 58% rename from features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserDialogsTest.kt rename to features/userprofile/shared/src/test/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserDialogsTest.kt index 5683b88c3c..66f129fe99 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/blockuser/BlockUserDialogsTest.kt +++ b/features/userprofile/shared/src/test/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserDialogsTest.kt @@ -14,15 +14,15 @@ * limitations under the License. */ -package io.element.android.features.roomdetails.impl.blockuser +package io.element.android.features.userprofile.shared.blockuser import androidx.activity.ComponentActivity import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 -import io.element.android.features.roomdetails.impl.R -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsEvents -import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState -import io.element.android.features.roomdetails.impl.members.details.aRoomMemberDetailsState +import io.element.android.features.userprofile.shared.R +import io.element.android.features.userprofile.shared.UserProfileEvents +import io.element.android.features.userprofile.shared.UserProfileState +import io.element.android.features.userprofile.shared.aUserProfileState import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.tests.testutils.EventsRecorder import io.element.android.tests.testutils.clickOn @@ -36,61 +36,61 @@ class BlockUserDialogsTest { @Test fun `confirm block user emit expected Event`() { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() rule.setContent { BlockUserDialogs( - state = aRoomMemberDetailsState( - displayConfirmationDialog = RoomMemberDetailsState.ConfirmationDialog.Block, + state = aUserProfileState( + displayConfirmationDialog = UserProfileState.ConfirmationDialog.Block, eventSink = eventsRecorder, ) ) } rule.clickOn(R.string.screen_dm_details_block_alert_action) - eventsRecorder.assertSingle(RoomMemberDetailsEvents.BlockUser(false)) + eventsRecorder.assertSingle(UserProfileEvents.BlockUser(false)) } @Test fun `cancel block user emit expected Event`() { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() rule.setContent { BlockUserDialogs( - state = aRoomMemberDetailsState( - displayConfirmationDialog = RoomMemberDetailsState.ConfirmationDialog.Block, + state = aUserProfileState( + displayConfirmationDialog = UserProfileState.ConfirmationDialog.Block, eventSink = eventsRecorder, ) ) } rule.clickOn(CommonStrings.action_cancel) - eventsRecorder.assertSingle(RoomMemberDetailsEvents.ClearConfirmationDialog) + eventsRecorder.assertSingle(UserProfileEvents.ClearConfirmationDialog) } @Test fun `confirm unblock user emit expected Event`() { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() rule.setContent { BlockUserDialogs( - state = aRoomMemberDetailsState( - displayConfirmationDialog = RoomMemberDetailsState.ConfirmationDialog.Unblock, + state = aUserProfileState( + displayConfirmationDialog = UserProfileState.ConfirmationDialog.Unblock, eventSink = eventsRecorder, ) ) } rule.clickOn(R.string.screen_dm_details_unblock_alert_action) - eventsRecorder.assertSingle(RoomMemberDetailsEvents.UnblockUser(false)) + eventsRecorder.assertSingle(UserProfileEvents.UnblockUser(false)) } @Test fun `cancel unblock user emit expected Event`() { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() rule.setContent { BlockUserDialogs( - state = aRoomMemberDetailsState( - displayConfirmationDialog = RoomMemberDetailsState.ConfirmationDialog.Unblock, + state = aUserProfileState( + displayConfirmationDialog = UserProfileState.ConfirmationDialog.Unblock, eventSink = eventsRecorder, ) ) } rule.clickOn(CommonStrings.action_cancel) - eventsRecorder.assertSingle(RoomMemberDetailsEvents.ClearConfirmationDialog) + eventsRecorder.assertSingle(UserProfileEvents.ClearConfirmationDialog) } } diff --git a/features/verifysession/impl/src/main/res/values-sv/translations.xml b/features/verifysession/impl/src/main/res/values-sv/translations.xml index e1c4572085..bac08c22a6 100644 --- a/features/verifysession/impl/src/main/res/values-sv/translations.xml +++ b/features/verifysession/impl/src/main/res/values-sv/translations.xml @@ -9,6 +9,7 @@ "Försök att verifiera igen" "Jag är redo" "Väntar på att matcha" + "Jämför en unik uppsättning emojis." "Jämför de unika emojierna och se till att de visas i samma ordning." "De matchar inte" "De matchar" diff --git a/features/verifysession/impl/src/main/res/values-zh-rTW/translations.xml b/features/verifysession/impl/src/main/res/values-zh-rTW/translations.xml index d73ea8e2c4..e98480316a 100644 --- a/features/verifysession/impl/src/main/res/values-zh-rTW/translations.xml +++ b/features/verifysession/impl/src/main/res/values-zh-rTW/translations.xml @@ -1,7 +1,11 @@ - "裝置已認證" - "使用另一個裝置" + "建立新的復原金鑰" + "驗證這部裝置以設定安全通訊。" + "確認這是你本人" + "您可以安全地讀取和發送訊息了,與您聊天的人也可以信任這部裝置。" + "裝置已驗證" + "使用另一部裝置" "正在等待其他裝置……" "似乎出了一點問題。有可能是因為等候逾時,或是請求被拒絕。" "確認顯示在其他工作階段上的表情符號是否和下方的相同。" diff --git a/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml b/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml index b6e0f3b32d..664aeebeaf 100644 --- a/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml @@ -30,7 +30,7 @@ "Vous avez rejoint le salon" "%1$s a demandé à rejoindre" "%1$s a autorisé %2$s à rejoindre" - "Vous avez autoriser %1$s à joindre le salon" + "Vous avez autorisé %1$s à joindre le salon" "Vous avez demandé à rejoindre" "%1$s a rejeté la demande de %2$s pour rejoindre" "Vous avez rejeté la demande de %1$s pour rejoindre" diff --git a/libraries/ui-strings/src/main/res/values-cs/translations.xml b/libraries/ui-strings/src/main/res/values-cs/translations.xml index 1aa3dc6ec5..66c33b70d9 100644 --- a/libraries/ui-strings/src/main/res/values-cs/translations.xml +++ b/libraries/ui-strings/src/main/res/values-cs/translations.xml @@ -244,6 +244,7 @@ "Načítání zpráv se nezdařilo" "%1$s nemá přístup k vaší poloze. Zkuste to prosím později." "Nepodařilo se nahrát hlasovou zprávu." + "Zpráva nebyla nalezena" "%1$s nemá oprávnění k přístupu k vaší poloze. Přístup můžete povolit v Nastavení." "%1$s nemá oprávnění k přístupu k vaší poloze. Povolit přístup níže." "%1$s nemá oprávnění k přístupu k mikrofonu. Povolte přístup k nahrávání hlasové zprávy." diff --git a/libraries/ui-strings/src/main/res/values-de/translations.xml b/libraries/ui-strings/src/main/res/values-de/translations.xml index eb8702cbc4..af217016a2 100644 --- a/libraries/ui-strings/src/main/res/values-de/translations.xml +++ b/libraries/ui-strings/src/main/res/values-de/translations.xml @@ -158,7 +158,7 @@ "Modern" "Stummschalten" "Keine Ergebnisse" - "Kein Raum-Name" + "Kein Raumname" "Offline" "oder" "Passwort" @@ -177,9 +177,7 @@ "Datenschutz­erklärung" "Reaktion" "Reaktionen" - - "Wiederherstellungsschlüssel" - + "Wiederherstellungsschlüssel" "Wird erneuert…" "%1$s antworten" "Einen Fehler melden" @@ -187,7 +185,7 @@ "Bericht eingereicht" "Rich-Text-Editor" "Raum" - "Raum-Name" + "Raumname" "z.B. dein Projektname" "Gespeicherte Änderungen" "Speichern" @@ -242,6 +240,7 @@ "Fehler beim Laden der Nachrichten" "%1$s konnte nicht auf deinen Standort zugreifen. Bitte versuche es später erneut." "Fehler beim Hochladen der Sprachnachricht." + "Nachricht nicht gefunden" "%1$s hat keine Erlaubnis, auf deinen Standort zuzugreifen. Du kannst den Zugriff in den Einstellungen aktivieren." "%1$s hat keine Erlaubnis, auf deinen Standort zuzugreifen. Aktiviere unten den Zugriff." "%1$s hat nicht die Erlaubnis auf dein Mikrofon zuzugreifen. Aktiviere den Zugriff, um eine Sprachnachricht aufzunehmen." diff --git a/libraries/ui-strings/src/main/res/values-hu/translations.xml b/libraries/ui-strings/src/main/res/values-hu/translations.xml index 409a2645ec..5e669f61f4 100644 --- a/libraries/ui-strings/src/main/res/values-hu/translations.xml +++ b/libraries/ui-strings/src/main/res/values-hu/translations.xml @@ -240,6 +240,7 @@ "Nem sikerült betölteni az üzeneteket" "Az %1$s nem tudta elérni a tartózkodási helyét. Próbálja újra később." "Nem sikerült feltölteni a hangüzenetét." + "Az üzenet nem található" "Az %1$snek nincs engedélye, hogy hozzáférjen a tartózkodási helyéhez. Ezt a beállításokban engedélyezheti." "Az %1$snek nincs engedélye, hogy hozzáférjen a tartózkodási helyéhez. Engedélyezze alább az elérését." "Az %1$snek nincs engedélye, hogy hozzáférjen a mikrofonhoz. Engedélyezze, hogy tudjon hangüzenetet felvenni." diff --git a/libraries/ui-strings/src/main/res/values-sv/translations.xml b/libraries/ui-strings/src/main/res/values-sv/translations.xml index 78b87f5cbe..11bdb97932 100644 --- a/libraries/ui-strings/src/main/res/values-sv/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sv/translations.xml @@ -15,6 +15,7 @@ "Avslutade omröstning" "Skicka filer" "Visa lösenord" + "Starta ett samtal" "Användarmeny" "Spela in röstmeddelande." "Godkänn" @@ -39,6 +40,7 @@ "Redigera omröstning" "Aktivera" "Avsluta omröstning" + "Ange PIN-kod" "Glömt lösenordet?" "Vidarebefordra" "Bjud in" @@ -146,8 +148,10 @@ "Uppdaterar …" "Svarar till %1$s" "Rapportera en bugg" + "Rapportera ett problem" "Rapport inskickad" "Riktextredigerare" + "Rum" "Rumsnamn" "t.ex. ditt projektnamn" "Skärmlås" @@ -159,6 +163,7 @@ "Server-URL" "Inställningar" "Delade plats" + "Loggar ut" "Startar chatt …" "Dekal" "Lyckades" @@ -178,9 +183,11 @@ "Användarnamn" "Verifiering avbruten" "Verifieringen slutförd" + "Verifiera enheten" "Video" "Röstmeddelande" "Väntar …" + "Väntar på detta meddelande" "Bekräftelse" "Fel" "Lyckades" diff --git a/tools/localazy/config.json b/tools/localazy/config.json index 70eb82cdee..fa5c456e4b 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -145,16 +145,21 @@ "includeRegex" : [ "screen_room_details_.*", "screen_room_member_list_.*", - "screen_dm_details_.*", "screen_room_notification_settings_.*", "screen_notification_settings_edit_failed_updating_default_mode", "screen_polls_history_title", "screen_notification_settings_mentions_only_disclaimer", - "screen_start_chat_error_starting_chat", "screen_room_change_.*", "screen_room_roles_.*" ] }, + { + "name" : ":features:userprofile:shared", + "includeRegex" : [ + "screen_start_chat_error_starting_chat", + "screen_dm_details_.*" + ] + }, { "name" : ":features:messages:impl", "includeRegex" : [ From b055452ae7224252d187802a83b63f0217d721eb Mon Sep 17 00:00:00 2001 From: ElementBot Date: Wed, 1 May 2024 08:27:46 +0000 Subject: [PATCH 243/289] Update screenshots --- ...ull_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,en].png} | 0 ...ull_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,en].png} | 0 ...ull_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,en].png} | 0 ...ull_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,en].png} | 0 ...ull_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,en].png} | 0 ...ull_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,en].png} | 0 ...ull_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,en].png} | 0 ...l_RoomDetailsEditView-Night-0_1_null_0,NEXUS_5,1.0,en].png} | 0 ...l_RoomDetailsEditView-Night-0_1_null_1,NEXUS_5,1.0,en].png} | 0 ...l_RoomDetailsEditView-Night-0_1_null_2,NEXUS_5,1.0,en].png} | 0 ...l_RoomDetailsEditView-Night-0_1_null_3,NEXUS_5,1.0,en].png} | 0 ...l_RoomDetailsEditView-Night-0_1_null_4,NEXUS_5,1.0,en].png} | 0 ...l_RoomDetailsEditView-Night-0_1_null_5,NEXUS_5,1.0,en].png} | 0 ...l_RoomDetailsEditView-Night-0_1_null_6,NEXUS_5,1.0,en].png} | 0 ...l_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,en].png} | 0 ...l_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,en].png} | 0 ...l_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,en].png} | 0 ...l_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,en].png} | 0 ...l_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,en].png} | 0 ...l_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,en].png} | 0 ...l_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,en].png} | 0 ...l_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,en].png} | 0 ...RoomInviteMembersView-Night-1_2_null_0,NEXUS_5,1.0,en].png} | 0 ...RoomInviteMembersView-Night-1_2_null_1,NEXUS_5,1.0,en].png} | 0 ...RoomInviteMembersView-Night-1_2_null_2,NEXUS_5,1.0,en].png} | 0 ...RoomInviteMembersView-Night-1_2_null_3,NEXUS_5,1.0,en].png} | 0 ...RoomInviteMembersView-Night-1_2_null_4,NEXUS_5,1.0,en].png} | 0 ...RoomInviteMembersView-Night-1_2_null_5,NEXUS_5,1.0,en].png} | 0 ...RoomInviteMembersView-Night-1_2_null_6,NEXUS_5,1.0,en].png} | 0 ...RoomInviteMembersView-Night-1_2_null_7,NEXUS_5,1.0,en].png} | 0 ...l_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en].png | 3 --- ...l_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en].png | 3 --- ...l_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en].png | 3 --- ...l_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en].png | 3 --- ...l_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en].png | 3 --- ...l_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en].png | 3 --- ...l_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en].png | 3 --- ..._RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en].png | 3 --- ..._RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en].png | 3 --- ..._RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en].png | 3 --- ..._RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en].png | 3 --- ..._RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en].png | 3 --- ..._RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en].png | 3 --- ..._RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en].png | 3 --- ...omMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,en].png} | 0 ...omMembersModerationView-Day-4_4_null_9,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_0,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_1,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_2,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_3,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_4,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_5,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_6,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_7,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_8,NEXUS_5,1.0,en].png} | 0 ...MembersModerationView-Night-4_5_null_9,NEXUS_5,1.0,en].png} | 0 ...oomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,en].png} | 0 ...oomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,en].png} | 0 ...oomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,en].png} | 0 ...mMemberListViewBanned-Night-3_4_null_0,NEXUS_5,1.0,en].png} | 0 ...mMemberListViewBanned-Night-3_4_null_1,NEXUS_5,1.0,en].png} | 0 ...mMemberListViewBanned-Night-3_4_null_2,NEXUS_5,1.0,en].png} | 0 ...null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,en].png} | 0 ...null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,en].png} | 0 ...null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,en].png} | 0 ...null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,en].png} | 0 ...null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,en].png} | 0 ...null_RoomMemberListView-Day-2_2_null_5,NEXUS_5,1.0,en].png} | 0 ...null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,en].png} | 0 ...null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,en].png} | 0 ...ll_RoomMemberListView-Night-2_3_null_0,NEXUS_5,1.0,en].png} | 0 ...ll_RoomMemberListView-Night-2_3_null_1,NEXUS_5,1.0,en].png} | 0 ...ll_RoomMemberListView-Night-2_3_null_2,NEXUS_5,1.0,en].png} | 0 ...ll_RoomMemberListView-Night-2_3_null_3,NEXUS_5,1.0,en].png} | 0 ...ll_RoomMemberListView-Night-2_3_null_4,NEXUS_5,1.0,en].png} | 0 ...ll_RoomMemberListView-Night-2_3_null_5,NEXUS_5,1.0,en].png} | 0 ...ll_RoomMemberListView-Night-2_3_null_6,NEXUS_5,1.0,en].png} | 0 ...ll_RoomMemberListView-Night-2_3_null_7,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsOption-Night-5_6_null,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsView-Night-6_7_null_0,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsView-Night-6_7_null_1,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsView-Night-6_7_null_2,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsView-Night-6_7_null_3,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsView-Night-6_7_null_4,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsView-Night-6_7_null_5,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsView-Night-6_7_null_6,NEXUS_5,1.0,en].png} | 0 ...otificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,en].png} | 0 ...ificationSettingsView-Night-7_8_null_0,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,en].png} | 0 ...w_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,en].png} | 0 ...ew_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_0,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_1,NEXUS_5,1.0,en].png} | 0 ...ull_ChangeRolesView-Night-9_10_null_10,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_2,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_3,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_4,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_5,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_6,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_7,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_8,NEXUS_5,1.0,en].png} | 0 ...null_ChangeRolesView-Night-9_10_null_9,NEXUS_5,1.0,en].png} | 0 ...ngMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,en].png} | 0 ...MemberRowWithLongName-Night-10_11_null,NEXUS_5,1.0,en].png} | 0 ...geRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png} | 0 ...geRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png} | 0 ...geRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png} | 0 ...geRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png} | 0 ...geRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png} | 0 ...geRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png} | 0 ...geRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png} | 0 ...RoomPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png} | 0 ...RoomPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png} | 0 ...RoomPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png} | 0 ...RoomPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png} | 0 ...RoomPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png} | 0 ...RoomPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png} | 0 ...RoomPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,en].png} | 0 ...RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,en].png} | 0 ...lesAndPermissionsView-Night-8_9_null_0,NEXUS_5,1.0,en].png} | 0 ...lesAndPermissionsView-Night-8_9_null_1,NEXUS_5,1.0,en].png} | 0 ...lesAndPermissionsView-Night-8_9_null_2,NEXUS_5,1.0,en].png} | 0 ...lesAndPermissionsView-Night-8_9_null_3,NEXUS_5,1.0,en].png} | 0 ...lesAndPermissionsView-Night-8_9_null_4,NEXUS_5,1.0,en].png} | 0 ...lesAndPermissionsView-Night-8_9_null_5,NEXUS_5,1.0,en].png} | 0 ...lesAndPermissionsView-Night-8_9_null_6,NEXUS_5,1.0,en].png} | 0 ...lesAndPermissionsView-Night-8_9_null_7,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png} | 0 ...sDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png} | 0 ...omDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png} | 0 ...iew_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png | 3 +++ ...w_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 3 +++ ...w_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 3 +++ ...w_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 3 +++ ...w_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 3 +++ ...w_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png | 3 +++ ...w_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png | 3 +++ ...w_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png | 3 +++ 192 files changed, 42 insertions(+), 42 deletions(-) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_7,NEXUS_5,1.0,en].png} (100%) delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_8_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_12_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 3ec53050d2..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b41b3bbb508692ecfc46c83f604d804eca61caeeccd55a0ab30aac66413c0bff -size 14548 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index 75f0aefa4c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9e10f8b1bb6526207cee9e7ec08de851fe84cfa05f05297711e2838ed2f95c9d -size 13074 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index 28798d311a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9d045c155a8f99540ac5b8e572c1a10a1f1018a009327052a1fdb4b4df9e995f -size 14679 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index c24175d89a..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b59bcf0d5f034db4b71ee2121f421a392b2af0cf2df4398724dbf36a9a159b43 -size 23660 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index 4a29b0d600..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc5b182adce4dd7761d4e5a4a56c879af4156918aa88f39a3a207f1aaf854cfe -size 20368 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en].png deleted file mode 100644 index f734193fb3..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:522260120e6c798780f42e494a759f79c5cff40e80df643fcc12e6c3d1fada83 -size 14936 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en].png deleted file mode 100644 index e8d8a5cddd..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:daabb8382e4f8cb4819126e52972f2dda5f0696d8a1440ebb463edf4625724c7 -size 16412 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en].png deleted file mode 100644 index 8443ed9e8c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:06c99626516a697f25484ace7e9b3f6c5c857c31d57f735b92cac8e9c36d0eb1 -size 14926 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en].png deleted file mode 100644 index d40b7b7b4d..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:698bfa2c828e9ef2c1f3439c9fe41d224f4af085490fbd9c0017cb1167925ffb -size 13335 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en].png deleted file mode 100644 index 9b9401af18..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3d802274a09c27166f1f499c2d1996f6bc413d3b3c698f4b181a2b5d45d936ed -size 15184 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en].png deleted file mode 100644 index 7ddefaeb79..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b90eb1a70523541a09fb9a594c275c2ac8021bd5fdf5f90bfcb7d2ca2732dd3 -size 26120 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en].png deleted file mode 100644 index cb38b78340..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6aa19f6b5c6abe46196fb0738f6acc2176eed46c3de90046b57efbfc0f272110 -size 23276 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en].png deleted file mode 100644 index 8ded491df8..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0252a48f758e3f300348a9494b8f5c91daa0ebad70a13d8fc1d967acb461f0be -size 15486 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en].png deleted file mode 100644 index 942b09d73c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:13c9e0632abcd758c591e03f2e9a39e3639f7cbca0a176e977b9823623d8bca9 -size 18710 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_8_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_8_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_12_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_12_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..3d4213060e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fc6369578a3684c1a88e904848bcb16a7e4cde46c887938db909563c6c54d2d +size 23031 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..468d483d65 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59e3eccfa962e9d667aaa326ab3258214334db558983bc251543835585d78453 +size 20930 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5f22b0b2a8 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07418c91e8efee98f7b9e7d069bf3aef2b674164dad0795719f97ad6b214225b +size 23550 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..099c6f745d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90fe61eb831db5e1f1eb213fcdd690f06f2e547b8ad864680288d529d379d30e +size 43651 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..940ff8e950 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6b0328e4f5a06b59ac5b73f4230bd950bed6847af275b9e6851ffdb9403742b +size 35523 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5e055eea74 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7536568491a41526b48354b60db41e47d40b6677e5b38f464c57715499514171 +size 24193 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..55525becf3 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:902bd8ddad85ee2ea52898a910baf0c710880d94c36f56e22916bf4d15f4469c +size 25864 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..93516a3dd0 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1744d73991a0987c53d214041a26eaf7a3ce8a2ff4c90739f65f8641c4af921d +size 22351 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..6d992d9f94 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4598d748f84146e66b547a5d9310c7e67477e1eb66d1c58bfb23f28807b7f54d +size 20263 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..b5e74695fe --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d448afa778c03771454d5493f15748dce3eeb7a7b35cd33cb38bb5a06646f5d +size 22550 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..82575f3676 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e000e964df93279e8325219a8a9ae74d1f66c533d418fabb88a208bc1165dbed +size 38724 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4f2c4d458c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf1d5e3367a9684cd4fd8ffebd4c38475fad0a6a6fa122df19281c1a3bf7349f +size 30814 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..3e589cdb18 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15c3812a12a76e5701bc1f487703ee32d6920f3c2d790f5b1d1a4b468da28000 +size 23047 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f1278e87d7 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3fefee021f7c3bc6a8b950a129fd7549b05416ff72b32b2b24a4317555f43d8 +size 22916 From 0fb89bd4b2f275dd6982a3e8c4c4414a61925e78 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 2 May 2024 15:37:57 +0200 Subject: [PATCH 244/289] Let MainActivity manage Element Call https links. --- app/src/main/AndroidManifest.xml | 5 +--- .../io/element/android/x/MainActivity.kt | 15 ++++++++++++ features/call/src/main/AndroidManifest.xml | 11 +++------ .../features/call/ui/ElementCallActivity.kt | 23 +++++++++++++++++++ 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ab2d565b3f..8c94bce2ac 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -76,8 +76,6 @@ @@ -86,8 +84,7 @@ - - + - - - - diff --git a/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt b/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt index 8eea4c814f..4c88f32afd 100644 --- a/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt +++ b/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt @@ -17,6 +17,7 @@ package io.element.android.features.call.ui import android.Manifest +import android.app.Activity import android.content.Context import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_NEW_TASK @@ -35,6 +36,7 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.core.app.ActivityOptionsCompat import androidx.core.content.IntentCompat import com.bumble.appyx.core.integrationpoint.NodeComponentActivity import io.element.android.compound.theme.ElementTheme @@ -47,6 +49,7 @@ import io.element.android.features.call.di.CallBindings import io.element.android.features.call.utils.CallIntentDataParser import io.element.android.features.preferences.api.store.AppPreferencesStore import io.element.android.libraries.architecture.bindings +import io.element.android.libraries.core.bool.orFalse import javax.inject.Inject class ElementCallActivity : NodeComponentActivity(), CallScreenNavigator { @@ -63,6 +66,26 @@ class ElementCallActivity : NodeComponentActivity(), CallScreenNavigator { } context.startActivity(intent) } + + /** + * Eventually start the ElementCallActivity, and return true if it's the case. + */ + fun maybeStart( + activity: Activity, + intent: Intent?, + ): Boolean { + return intent?.data + ?.takeIf { uri -> uri.scheme == "https" && uri.host == "call.element.io" } + ?.let { uri -> + val callIntent = Intent(activity, ElementCallActivity::class.java).apply { + data = uri + } + // Disable animation since MainActivity has already been animated. + val options = ActivityOptionsCompat.makeCustomAnimation(activity, 0, 0) + activity.startActivity(callIntent, options.toBundle()) + true + }.orFalse() + } } @Inject lateinit var callIntentDataParser: CallIntentDataParser From 181742b251767da6439fb3cd6045795a7fbca99d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 2 May 2024 18:41:20 +0200 Subject: [PATCH 245/289] Add documentation and small script to test external deep links. --- docs/deeplink.md | 71 ++++++++++++++++++++++++++++++++++ tools/adb/deeplink_external.sh | 19 +++++++++ 2 files changed, 90 insertions(+) create mode 100644 docs/deeplink.md create mode 100755 tools/adb/deeplink_external.sh diff --git a/docs/deeplink.md b/docs/deeplink.md new file mode 100644 index 0000000000..1350b2f736 --- /dev/null +++ b/docs/deeplink.md @@ -0,0 +1,71 @@ +# Element X Android deeplink + + + +* [Introduction](#introduction) + * [Asset Links](#asset-links) + * [Supported links](#supported-links) +* [Developer tools](#developer-tools) + + + + +## Introduction + +Element X Android supports deep linking to specific screens in the application. This document explains how to use deep links in Element X Android. + +### Asset Links + +The asset links file is available at https://element.io/.well-known/assetlinks.json + +### Supported links + +Element Call link: +> https://call.element.io/Example + +Link to a user: +> https://app.element.io/#/user/@alice:matrix.org + +Link to a room by id or alias: +> https://app.element.io/#/room/!roomid:matrix.org +> https://app.element.io/#/room/#element-x-android:matrix.org + +Link to a room with a specific event: +> https://app.element.io/#/room/!roomid:matrix.org/$eventid + +Note that it will also work with other domain such as: +> https://mobile.element.io +> https://develop.element.io +> https://staging.element.io + +## Developer tools + +Using an Android 12 or higher emulator + +Ensure links verification is enabled +```bash +adb shell am compat enable 175408749 io.element.android.x.debug +``` + +Reset link verifications for the given package id +```bash +adb shell pm set-app-links --package io.element.android.x.debug 0 all +``` + +Force the package id links to be verified +```bash +adb shell pm verify-app-links --re-verify io.element.android.x.debug +``` + +Print the link verification of the package id +```bash +adb shell pm get-app-links io.element.android.x.debug +``` + +``` + io.element.android.x.debug: + ID: e2ece472-c266-4bf0-829c-be79959a6270 + Signatures: [B0:B0:51:DC:56:5C:81:2F:E1:7F:6F:3E:94:5B:4D:79:04:71:23:AB:0D:A6:12:86:76:9E:B2:94:91:97:13:0E] + Domain verification state: + *.element.io: 1024 +``` diff --git a/tools/adb/deeplink_external.sh b/tools/adb/deeplink_external.sh new file mode 100755 index 0000000000..c5a03c5f40 --- /dev/null +++ b/tools/adb/deeplink_external.sh @@ -0,0 +1,19 @@ +#! /bin/bash +# +# Copyright (c) 2024 New Vector Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE \ + -d "https://app.element.io/#/room/!cuqHozLHNBgupgLMKN:matrix.org/%24LZDOueY3R8OD2ZYf8FLKtu95aF7imLBC3F5TIUj-4cc" From 4dfec7ac551a3f96515abb11bacbaff63449dda6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 3 May 2024 09:34:54 +0200 Subject: [PATCH 246/289] Format --- .../io/element/android/features/call/ui/ElementCallActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt b/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt index 4c88f32afd..30de2a98b8 100644 --- a/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt +++ b/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt @@ -84,7 +84,8 @@ class ElementCallActivity : NodeComponentActivity(), CallScreenNavigator { val options = ActivityOptionsCompat.makeCustomAnimation(activity, 0, 0) activity.startActivity(callIntent, options.toBundle()) true - }.orFalse() + } + .orFalse() } } From 1bcfa6034c736844696b6688ced548e66e47731d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 3 May 2024 11:57:22 +0200 Subject: [PATCH 247/289] Add support for link generated by matrix.to website. --- app/src/main/AndroidManifest.xml | 13 ++++++++++++- .../core/extensions/BasicExtensions.kt | 12 ++++++++++++ .../permalink/DefaultMatrixToConverter.kt | 9 ++++++++- .../permalink/DefaultMatrixToConverterTest.kt | 12 ++++++++++++ tools/adb/deeplink_matrixto.sh | 19 +++++++++++++++++++ 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100755 tools/adb/deeplink_matrixto.sh diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8c94bce2ac..725ad40d3d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -87,7 +87,7 @@ @@ -100,6 +100,17 @@ + + + + + + + + + https://matrix.to/#/#element-android:matrix.org * - https://app.element.io/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org * - https://www.example.org/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org + * Also convert links coming from the matrix.to website: + * - element://room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org + * - element://user/@alice:matrix.org -> https://matrix.to/#/@alice:matrix.org */ override fun convert(uri: Uri): Uri? { val uriString = uri.toString() + // Handle links coming from the matrix.to website. + .replacePrefix(MATRIX_TO_CUSTOM_SCHEME_BASE_URL, "https://app.element.io/#/") val baseUrl = MatrixConfiguration.MATRIX_TO_PERMALINK_BASE_URL return when { @@ -54,7 +60,8 @@ class DefaultMatrixToConverter @Inject constructor() : MatrixToConverter { } companion object { - val SUPPORTED_PATHS = listOf( + private const val MATRIX_TO_CUSTOM_SCHEME_BASE_URL = "element://" + private val SUPPORTED_PATHS = listOf( "/#/room/", "/#/user/", "/#/group/" diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverterTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverterTest.kt index 7401ac7c2e..2b4933e5ac 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverterTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverterTest.kt @@ -53,4 +53,16 @@ class DefaultMatrixToConverterTest { val url = Uri.parse("https://element.io/") assertThat(DefaultMatrixToConverter().convert(url)).isNull() } + + @Test + fun `converting url coming from the matrix-to website returns a matrix-to url for room case`() { + val url = Uri.parse("element://room/#element-android:matrix.org") + assertThat(DefaultMatrixToConverter().convert(url)).isEqualTo(Uri.parse("https://matrix.to/#/#element-android:matrix.org")) + } + + @Test + fun `converting url coming from the matrix-to website returns a matrix-to url for user case`() { + val url = Uri.parse("element://user/@alice:matrix.org") + assertThat(DefaultMatrixToConverter().convert(url)).isEqualTo(Uri.parse("https://matrix.to/#/@alice:matrix.org")) + } } diff --git a/tools/adb/deeplink_matrixto.sh b/tools/adb/deeplink_matrixto.sh new file mode 100755 index 0000000000..2153937288 --- /dev/null +++ b/tools/adb/deeplink_matrixto.sh @@ -0,0 +1,19 @@ +#! /bin/bash +# +# Copyright (c) 2024 New Vector Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +adb shell am start -a android.intent.action.VIEW \ + -d "element://room/%23element-android%3Amatrix.org" From fb59776814a1f20b877d9728250390f1030d4156 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 3 May 2024 12:07:20 +0200 Subject: [PATCH 248/289] Small rework for code clarity. Actually hide the attachment of LoggedInAppScopeFlowNode. --- .../main/kotlin/io/element/android/appnav/RootFlowNode.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index 78f9943843..db04345a4e 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -288,7 +288,6 @@ class RootFlowNode @AssistedInject constructor( private suspend fun navigateTo(permalinkData: PermalinkData) { Timber.d("Navigating to $permalinkData") attachSession(null) - .attachSession() .apply { when (permalinkData) { is PermalinkData.FallbackLink -> Unit @@ -309,7 +308,6 @@ class RootFlowNode @AssistedInject constructor( private suspend fun navigateTo(deeplinkData: DeeplinkData) { Timber.d("Navigating to $deeplinkData") attachSession(deeplinkData.sessionId) - .attachSession() .apply { when (deeplinkData) { is DeeplinkData.Root -> Unit // The room list will always be shown, observing FtueState @@ -323,10 +321,11 @@ class RootFlowNode @AssistedInject constructor( } // [sessionId] will be null for permalink. - private suspend fun attachSession(sessionId: SessionId?): LoggedInAppScopeFlowNode { + private suspend fun attachSession(sessionId: SessionId?): LoggedInFlowNode { // TODO handle multi-session - return waitForChildAttached { navTarget -> + return waitForChildAttached { navTarget -> navTarget is NavTarget.LoggedInFlow && (sessionId == null || navTarget.sessionId == sessionId) } + .attachSession() } } From fa4ad4a9342b12a57424599736ec7026088a3442 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 3 May 2024 12:16:46 +0200 Subject: [PATCH 249/289] Improve documentation --- .../io/element/android/features/call/ui/ElementCallActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt b/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt index 30de2a98b8..1c9ece7fb9 100644 --- a/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt +++ b/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt @@ -68,7 +68,8 @@ class ElementCallActivity : NodeComponentActivity(), CallScreenNavigator { } /** - * Eventually start the ElementCallActivity, and return true if it's the case. + * Starts the [ElementCallActivity] if the intent contains a valid URL, + * and returns true if it's the case. */ fun maybeStart( activity: Activity, From 0036fa71048d85e5a59b3deb2ca2370fda786681 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 3 May 2024 12:17:41 +0200 Subject: [PATCH 250/289] Sort imports. --- .../android/features/userprofile/impl/UserProfileFlowNode.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt index c0edb2d8ea..43402fa015 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt @@ -29,9 +29,9 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.userprofile.api.UserProfileEntryPoint -import io.element.android.features.userprofile.shared.avatar.AvatarPreviewNode import io.element.android.features.userprofile.impl.root.UserProfileNode import io.element.android.features.userprofile.shared.UserProfileNodeHelper +import io.element.android.features.userprofile.shared.avatar.AvatarPreviewNode import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode From 50b77a3cbedfd45dae17e58999d3da1433d5dd78 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 3 May 2024 12:18:40 +0200 Subject: [PATCH 251/289] changelog --- changelog.d/2776.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2776.feature diff --git a/changelog.d/2776.feature b/changelog.d/2776.feature new file mode 100644 index 0000000000..8eec28ef80 --- /dev/null +++ b/changelog.d/2776.feature @@ -0,0 +1 @@ +Add support for external permalinks. From f48cc81434e227c35e4f45e1f195a1319f7539a1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 3 May 2024 12:37:36 +0200 Subject: [PATCH 252/289] Add tests on IntentResolver about external permalink. --- .../appnav/intent/IntentResolverTest.kt | 60 ++++++++++++++++++- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt index fa588410dc..074009cacc 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt @@ -27,6 +27,7 @@ import io.element.android.features.login.impl.oidc.OidcUrlParser import io.element.android.libraries.deeplink.DeepLinkCreator import io.element.android.libraries.deeplink.DeeplinkData import io.element.android.libraries.deeplink.DeeplinkParser +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_SESSION_ID @@ -165,9 +166,60 @@ class IntentResolverTest { } } + @Test + fun `test resolve external permalink`() { + val permalinkData = PermalinkData.UserLink( + userId = UserId("@alice:matrix.org") + ) + val sut = createIntentResolver( + permalinkParserResult = { permalinkData } + ) + val intent = Intent(RuntimeEnvironment.getApplication(), Activity::class.java).apply { + action = Intent.ACTION_VIEW + data = "https://matrix.to/#/@alice:matrix.org".toUri() + } + val result = sut.resolve(intent) + assertThat(result).isEqualTo( + ResolvedIntent.Permalink( + permalinkData = permalinkData + ) + ) + } + + @Test + fun `test resolve external permalink, FallbackLink should be ignored`() { + val sut = createIntentResolver( + permalinkParserResult = { PermalinkData.FallbackLink(Uri.parse("https://matrix.org")) } + ) + val intent = Intent(RuntimeEnvironment.getApplication(), Activity::class.java).apply { + action = Intent.ACTION_VIEW + data = "https://matrix.to/#/@alice:matrix.org".toUri() + } + val result = sut.resolve(intent) + assertThat(result).isNull() + } + + @Test + fun `test resolve external permalink, invalid action`() { + val permalinkData = PermalinkData.UserLink( + userId = UserId("@alice:matrix.org") + ) + val sut = createIntentResolver( + permalinkParserResult = { permalinkData } + ) + val intent = Intent(RuntimeEnvironment.getApplication(), Activity::class.java).apply { + action = Intent.ACTION_SEND + data = "https://matrix.to/invalid".toUri() + } + val result = sut.resolve(intent) + assertThat(result).isNull() + } + @Test fun `test resolve invalid`() { - val sut = createIntentResolver() + val sut = createIntentResolver( + permalinkParserResult = { PermalinkData.FallbackLink(Uri.parse("https://matrix.org")) } + ) val intent = Intent(RuntimeEnvironment.getApplication(), Activity::class.java).apply { action = Intent.ACTION_VIEW data = "io.element:/invalid".toUri() @@ -176,14 +228,16 @@ class IntentResolverTest { assertThat(result).isNull() } - private fun createIntentResolver(): IntentResolver { + private fun createIntentResolver( + permalinkParserResult: () -> PermalinkData = { throw NotImplementedError() } + ): IntentResolver { return IntentResolver( deeplinkParser = DeeplinkParser(), oidcIntentResolver = DefaultOidcIntentResolver( oidcUrlParser = OidcUrlParser() ), permalinkParser = FakePermalinkParser( - result = { PermalinkData.FallbackLink(Uri.parse("https://matrix.org")) } + result = permalinkParserResult ), ) } From baf3877bf702d37fc00e20aa87be81f24bb24175 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 3 May 2024 12:39:52 +0200 Subject: [PATCH 253/289] Fix link from matrix.to websote not working. --- app/src/main/AndroidManifest.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 725ad40d3d..1089d631d9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -105,7 +105,9 @@ --> + + From e95d24da56956c85b48111431f7a39007a4a6a51 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 16:21:35 +0200 Subject: [PATCH 254/289] Update wysiwyg to v2.37.1 (#2791) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a032e53d2b..54ec373ba2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -43,7 +43,7 @@ serialization_json = "1.6.3" showkase = "1.0.2" appyx = "1.4.0" sqldelight = "2.0.2" -wysiwyg = "2.37.0" +wysiwyg = "2.37.1" telephoto = "0.11.2" # DI From 9bf1cd68e259d75a1bc97fa836c10cdff8bde478 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 14:22:13 +0000 Subject: [PATCH 255/289] Update dependency com.google.firebase:firebase-bom to v33 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 54ec373ba2..db8cfe6b6a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -68,7 +68,7 @@ kotlin_gradle_plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", v kover_gradle_plugin = { module = "org.jetbrains.kotlinx:kover-gradle-plugin", version.ref = "kover" } gms_google_services = "com.google.gms:google-services:4.4.1" # https://firebase.google.com/docs/android/setup#available-libraries -google_firebase_bom = "com.google.firebase:firebase-bom:32.8.1" +google_firebase_bom = "com.google.firebase:firebase-bom:33.0.0" firebase_appdistribution_gradle = { module = "com.google.firebase:firebase-appdistribution-gradle", version.ref = "firebaseAppDistribution" } autonomousapps_dependencyanalysis_plugin = { module = "com.autonomousapps:dependency-analysis-gradle-plugin", version.ref = "dependencyAnalysis" } From 5425cdcbb1a7f3c064d09d0a47838a1ced4a6aba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Fri, 3 May 2024 17:13:07 +0200 Subject: [PATCH 256/289] Use `GoogleApiAvailabilityLight` instead of `GoogleApiAvailability` --- .../pushproviders/firebase/IsPlayServiceAvailable.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt index 50d9d4fe6f..0e4e080fd5 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt @@ -18,7 +18,7 @@ package io.element.android.libraries.pushproviders.firebase import android.content.Context import com.google.android.gms.common.ConnectionResult -import com.google.android.gms.common.GoogleApiAvailability +import com.google.android.gms.common.GoogleApiAvailabilityLight import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.ApplicationContext @@ -34,7 +34,7 @@ class DefaultIsPlayServiceAvailable @Inject constructor( @ApplicationContext private val context: Context, ) : IsPlayServiceAvailable { override fun isAvailable(): Boolean { - val apiAvailability = GoogleApiAvailability.getInstance() + val apiAvailability = GoogleApiAvailabilityLight.getInstance() val resultCode = apiAvailability.isGooglePlayServicesAvailable(context) return if (resultCode == ConnectionResult.SUCCESS) { Timber.d("Google Play Services is available") From 68fdaef8b82b3654f8fb3c3b3fc2a4a33f573bdf Mon Sep 17 00:00:00 2001 From: bmarty <3940906+bmarty@users.noreply.github.com> Date: Mon, 6 May 2024 00:19:35 +0000 Subject: [PATCH 257/289] Sync Strings from Localazy --- .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-fr/translations.xml | 18 +- .../src/main/res/values-sv/translations.xml | 1 + .../src/main/res/values-fr/translations.xml | 4 +- .../main/res/values-zh-rTW/translations.xml | 3 + .../src/main/res/values-fr/translations.xml | 3 +- .../src/main/res/values-sv/translations.xml | 9 + .../src/main/res/values-sv/translations.xml | 8 + .../src/main/res/values-sv/translations.xml | 7 + .../src/main/res/values-sv/translations.xml | 1 + .../src/main/res/values-sv/translations.xml | 4 + .../src/main/res/values-sv/translations.xml | 6 + .../src/main/res/values-fr/translations.xml | 6 +- .../src/main/res/values-sv/translations.xml | 1 + .../src/main/res/values-fr/translations.xml | 2 +- .../src/main/res/values-sv/translations.xml | 2 + .../src/main/res/values-sv/translations.xml | 2 + .../src/main/res/values-sv/translations.xml | 2 + .../src/main/res/values-fr/translations.xml | 4 +- .../src/main/res/values-sk/translations.xml | 1 + .../src/main/res/values-sv/translations.xml | 27 + .../src/main/res/values/localazy.xml | 1 + ...cesView-Day-0_1_null_0,NEXUS_5,1.0,de].png | 4 +- ...tInView-Day-0_1_null_0,NEXUS_5,1.0,de].png | 4 +- ...pleView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 4 +- ...pleView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...istView-Day-2_3_null_1,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-3_4_null_0,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-3_4_null_1,NEXUS_5,1.0,de].png | 4 +- ...oomView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...PinView-Day-3_4_null_0,NEXUS_5,1.0,de].png | 4 +- ...PinView-Day-3_4_null_1,NEXUS_5,1.0,de].png | 4 +- ...PinView-Day-3_4_null_2,NEXUS_5,1.0,de].png | 4 +- ...outView-Day-0_1_null_9,NEXUS_5,1.0,de].png | 4 +- ...View-Day-37_37_null_0,NEXUS_5,1.0,de].png} | 0 ...dView-Day-37_37_null_1,NEXUS_5,1.0,de].png | 3 + ...dView-Day-37_37_null_2,NEXUS_5,1.0,de].png | 3 + ...teView-Day-42_42_null,NEXUS_5,1.0,de].png} | 0 ...View-Day-44_44_null_0,NEXUS_5,1.0,de].png} | 0 ...View-Day-44_44_null_1,NEXUS_5,1.0,de].png} | 0 ...View-Day-44_44_null_2,NEXUS_5,1.0,de].png} | 0 ...View-Day-44_44_null_3,NEXUS_5,1.0,de].png} | 0 ...edView-Day-45_45_null,NEXUS_5,1.0,de].png} | 0 ...wnView-Day-49_49_null,NEXUS_5,1.0,de].png} | 0 ...heet-Day-58_58_null_0,NEXUS_5,1.0,de].png} | 0 ...heet-Day-58_58_null_1,NEXUS_5,1.0,de].png} | 0 ...heet-Day-58_58_null_2,NEXUS_5,1.0,de].png} | 0 ...heet-Day-58_58_null_3,NEXUS_5,1.0,de].png} | 0 ...heet-Day-58_58_null_4,NEXUS_5,1.0,de].png} | 0 ...heet-Day-58_58_null_5,NEXUS_5,1.0,de].png} | 0 ...Menu-Day-59_59_null_1,NEXUS_5,1.0,de].png} | 0 ...erView-Day-60_60_null,NEXUS_5,1.0,de].png} | 0 ...erView-Day-62_62_null,NEXUS_5,1.0,de].png} | 0 ...ngView-Day-63_63_null,NEXUS_5,1.0,de].png} | 0 ...eply-Day-25_25_null_4,NEXUS_5,1.0,de].png} | 0 ...eply-Day-25_25_null_8,NEXUS_5,1.0,de].png} | 0 ...llapse-Day-27_27_null,NEXUS_5,1.0,de].png} | 0 ...xpanded-Day-25_25_null,NEXUS_5,1.0,de].png | 3 - ...xpanded-Day-26_26_null,NEXUS_5,1.0,de].png | 3 + ...Layout-Day-28_28_null,NEXUS_5,1.0,de].png} | 0 ...coming-Day-31_31_null,NEXUS_5,1.0,de].png} | 0 ...tgoing-Day-32_32_null,NEXUS_5,1.0,de].png} | 0 ...eView-Day-66_66_null_1,NEXUS_5,1.0,de].png | 3 + ...eView-Day-66_66_null_2,NEXUS_5,1.0,de].png | 3 + ...eView-Day-66_66_null_3,NEXUS_5,1.0,de].png | 3 + ...ineView-Day-9_9_null_0,NEXUS_5,1.0,de].png | 4 +- ...ineView-Day-9_9_null_1,NEXUS_5,1.0,de].png | 4 +- ...neView-Day-9_9_null_11,NEXUS_5,1.0,de].png | 4 +- ...neView-Day-9_9_null_12,NEXUS_5,1.0,de].png | 4 +- ...neView-Day-9_9_null_13,NEXUS_5,1.0,de].png | 4 +- ...neView-Day-9_9_null_14,NEXUS_5,1.0,de].png | 4 +- ...neView-Day-9_9_null_15,NEXUS_5,1.0,de].png | 4 +- ...neView-Day-9_9_null_16,NEXUS_5,1.0,de].png | 4 +- ...ineView-Day-9_9_null_4,NEXUS_5,1.0,de].png | 4 +- ...ineView-Day-9_9_null_6,NEXUS_5,1.0,de].png | 4 +- ...ineView-Day-9_9_null_8,NEXUS_5,1.0,de].png | 4 +- ...yping-Day-65_65_null_0,NEXUS_5,1.0,de].png | 3 - ...yping-Day-65_65_null_1,NEXUS_5,1.0,de].png | 3 - ...yping-Day-67_67_null_0,NEXUS_5,1.0,de].png | 3 + ...yping-Day-67_67_null_1,NEXUS_5,1.0,de].png | 3 + ...View-Day-68_68_null_1,NEXUS_5,1.0,de].png} | 0 ...View-Day-68_68_null_2,NEXUS_5,1.0,de].png} | 0 ...View-Day-68_68_null_3,NEXUS_5,1.0,de].png} | 0 ...View-Day-68_68_null_4,NEXUS_5,1.0,de].png} | 0 ...View-Day-68_68_null_5,NEXUS_5,1.0,de].png} | 0 ...View-Day-68_68_null_6,NEXUS_5,1.0,de].png} | 0 ...gesView-Day-0_0_null_0,NEXUS_5,1.0,de].png | 4 +- ...esView-Day-0_0_null_10,NEXUS_5,1.0,de].png | 4 +- ...esView-Day-0_0_null_11,NEXUS_5,1.0,de].png | 4 +- ...esView-Day-0_0_null_12,NEXUS_5,1.0,de].png | 4 +- ...gesView-Day-0_0_null_3,NEXUS_5,1.0,de].png | 4 +- ...gesView-Day-0_0_null_4,NEXUS_5,1.0,de].png | 4 +- ...gesView-Day-0_0_null_5,NEXUS_5,1.0,de].png | 4 +- ...gesView-Day-0_0_null_6,NEXUS_5,1.0,de].png | 4 +- ...gesView-Day-0_0_null_7,NEXUS_5,1.0,de].png | 4 +- ...gesView-Day-0_0_null_8,NEXUS_5,1.0,de].png | 4 +- ...gesView-Day-0_0_null_9,NEXUS_5,1.0,de].png | 4 +- ...ngsView-Day-2_3_null_0,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_0,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_1,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_2,NEXUS_5,1.0,de].png | 4 +- ...ingView-Day-8_9_null_4,NEXUS_5,1.0,de].png | 4 +- ...ditView-Day-0_0_null_0,NEXUS_5,1.0,de].png | 3 + ...ditView-Day-0_0_null_1,NEXUS_5,1.0,de].png | 3 + ...ditView-Day-0_0_null_2,NEXUS_5,1.0,de].png | 3 + ...ditView-Day-0_0_null_3,NEXUS_5,1.0,de].png | 3 + ...ditView-Day-0_0_null_4,NEXUS_5,1.0,de].png | 3 + ...ditView-Day-0_0_null_5,NEXUS_5,1.0,de].png | 3 + ...itView-Day-0_0_null_6,NEXUS_5,1.0,de].png} | 0 ...ditView-Day-0_1_null_0,NEXUS_5,1.0,de].png | 3 - ...ditView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 3 - ...ditView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 3 - ...ditView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 3 - ...ditView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 3 - ...ditView-Day-0_1_null_5,NEXUS_5,1.0,de].png | 3 - ...rsView-Day-1_1_null_0,NEXUS_5,1.0,de].png} | 0 ...ersView-Day-1_1_null_1,NEXUS_5,1.0,de].png | 3 + ...rsView-Day-1_1_null_2,NEXUS_5,1.0,de].png} | 0 ...ersView-Day-1_1_null_3,NEXUS_5,1.0,de].png | 3 + ...rsView-Day-1_1_null_4,NEXUS_5,1.0,de].png} | 0 ...ersView-Day-1_1_null_5,NEXUS_5,1.0,de].png | 3 + ...ersView-Day-1_1_null_6,NEXUS_5,1.0,de].png | 3 + ...rsView-Day-1_1_null_7,NEXUS_5,1.0,de].png} | 0 ...ersView-Day-1_2_null_1,NEXUS_5,1.0,de].png | 3 - ...ersView-Day-1_2_null_3,NEXUS_5,1.0,de].png | 3 - ...ersView-Day-1_2_null_5,NEXUS_5,1.0,de].png | 3 - ...ersView-Day-1_2_null_6,NEXUS_5,1.0,de].png | 3 - ...lsViewDark--3_3_null_0,NEXUS_5,1.0,de].png | 3 - ...lsViewDark--3_3_null_1,NEXUS_5,1.0,de].png | 3 - ...lsViewDark--3_3_null_2,NEXUS_5,1.0,de].png | 3 - ...lsViewDark--3_3_null_3,NEXUS_5,1.0,de].png | 3 - ...lsViewDark--3_3_null_4,NEXUS_5,1.0,de].png | 3 - ...lsViewDark--3_3_null_5,NEXUS_5,1.0,de].png | 3 - ...lsViewDark--3_3_null_6,NEXUS_5,1.0,de].png | 3 - ...sViewLight--2_2_null_0,NEXUS_5,1.0,de].png | 3 - ...sViewLight--2_2_null_1,NEXUS_5,1.0,de].png | 3 - ...sViewLight--2_2_null_2,NEXUS_5,1.0,de].png | 3 - ...sViewLight--2_2_null_3,NEXUS_5,1.0,de].png | 3 - ...sViewLight--2_2_null_4,NEXUS_5,1.0,de].png | 3 - ...sViewLight--2_2_null_5,NEXUS_5,1.0,de].png | 3 - ...sViewLight--2_2_null_6,NEXUS_5,1.0,de].png | 3 - ...onView-Day-4_4_null_0,NEXUS_5,1.0,de].png} | 0 ...onView-Day-4_4_null_1,NEXUS_5,1.0,de].png} | 0 ...onView-Day-4_4_null_2,NEXUS_5,1.0,de].png} | 0 ...onView-Day-4_4_null_3,NEXUS_5,1.0,de].png} | 0 ...onView-Day-4_4_null_4,NEXUS_5,1.0,de].png} | 0 ...onView-Day-4_4_null_5,NEXUS_5,1.0,de].png} | 0 ...onView-Day-4_4_null_6,NEXUS_5,1.0,de].png} | 0 ...onView-Day-4_4_null_7,NEXUS_5,1.0,de].png} | 0 ...onView-Day-4_4_null_8,NEXUS_5,1.0,de].png} | 0 ...Banned-Day-3_3_null_0,NEXUS_5,1.0,de].png} | 0 ...Banned-Day-3_3_null_1,NEXUS_5,1.0,de].png} | 0 ...Banned-Day-3_3_null_2,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_2_null_0,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_2_null_1,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_2_null_2,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_2_null_3,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_2_null_4,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_2_null_6,NEXUS_5,1.0,de].png} | 0 ...stView-Day-2_2_null_7,NEXUS_5,1.0,de].png} | 0 ...gsOption-Day-5_5_null,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_6_null_0,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_6_null_1,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_6_null_2,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_6_null_3,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_6_null_4,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_6_null_5,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-6_6_null_6,NEXUS_5,1.0,de].png} | 0 ...gsView-Day-7_7_null_0,NEXUS_5,1.0,de].png} | 0 ...esView-Day-9_10_null_1,NEXUS_5,1.0,de].png | 3 - ...sView-Day-9_10_null_10,NEXUS_5,1.0,de].png | 3 - ...esView-Day-9_10_null_2,NEXUS_5,1.0,de].png | 3 - ...esView-Day-9_10_null_3,NEXUS_5,1.0,de].png | 3 - ...esView-Day-9_10_null_4,NEXUS_5,1.0,de].png | 3 - ...esView-Day-9_10_null_6,NEXUS_5,1.0,de].png | 3 - ...esView-Day-9_10_null_7,NEXUS_5,1.0,de].png | 3 - ...esView-Day-9_10_null_8,NEXUS_5,1.0,de].png | 3 - ...esView-Day-9_10_null_9,NEXUS_5,1.0,de].png | 3 - ...esView-Day-9_9_null_0,NEXUS_5,1.0,de].png} | 0 ...lesView-Day-9_9_null_1,NEXUS_5,1.0,de].png | 3 + ...esView-Day-9_9_null_10,NEXUS_5,1.0,de].png | 3 + ...lesView-Day-9_9_null_2,NEXUS_5,1.0,de].png | 3 + ...lesView-Day-9_9_null_3,NEXUS_5,1.0,de].png | 3 + ...lesView-Day-9_9_null_4,NEXUS_5,1.0,de].png | 3 + ...esView-Day-9_9_null_5,NEXUS_5,1.0,de].png} | 0 ...lesView-Day-9_9_null_6,NEXUS_5,1.0,de].png | 3 + ...lesView-Day-9_9_null_7,NEXUS_5,1.0,de].png | 3 + ...lesView-Day-9_9_null_8,NEXUS_5,1.0,de].png | 3 + ...lesView-Day-9_9_null_9,NEXUS_5,1.0,de].png | 3 + ...ngName-Day-10_10_null,NEXUS_5,1.0,de].png} | 0 ...sView-Day-11_11_null_0,NEXUS_5,1.0,de].png | 3 + ...View-Day-11_11_null_1,NEXUS_5,1.0,de].png} | 0 ...View-Day-11_11_null_2,NEXUS_5,1.0,de].png} | 0 ...sView-Day-11_11_null_3,NEXUS_5,1.0,de].png | 3 + ...sView-Day-11_11_null_4,NEXUS_5,1.0,de].png | 3 + ...sView-Day-11_11_null_5,NEXUS_5,1.0,de].png | 3 + ...sView-Day-11_11_null_6,NEXUS_5,1.0,de].png | 3 + ...sView-Day-11_12_null_0,NEXUS_5,1.0,de].png | 3 - ...sView-Day-11_12_null_3,NEXUS_5,1.0,de].png | 3 - ...sView-Day-11_12_null_4,NEXUS_5,1.0,de].png | 3 - ...sView-Day-11_12_null_5,NEXUS_5,1.0,de].png | 3 - ...sView-Day-11_12_null_6,NEXUS_5,1.0,de].png | 3 - ...nsView-Day-8_8_null_0,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_8_null_1,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_8_null_2,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_8_null_3,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_8_null_4,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_8_null_5,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_8_null_6,NEXUS_5,1.0,de].png} | 0 ...nsView-Day-8_8_null_7,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_0,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_1,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_2,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_3,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_4,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_5,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_6,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_7,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_8,NEXUS_5,1.0,de].png} | 0 ...tailsDark--1_3_null_9,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_0,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_1,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_2,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_3,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_4,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_5,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_6,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_7,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_8,NEXUS_5,1.0,de].png} | 0 ...omDetails--0_2_null_9,NEXUS_5,1.0,de].png} | 0 ...maryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png | 4 +- ...aryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png | 4 +- ...Content-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...istView-Day-1_2_null_3,NEXUS_5,1.0,de].png | 4 +- ...bleView-Day-1_2_null_0,NEXUS_5,1.0,de].png | 4 +- ...bleView-Day-1_2_null_1,NEXUS_5,1.0,de].png | 4 +- ...bleView-Day-1_2_null_2,NEXUS_5,1.0,de].png | 4 +- ...bleView-Day-1_2_null_3,NEXUS_5,1.0,de].png | 4 +- ...KeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png | 4 +- ...KeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png | 4 +- ...KeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png | 4 +- ...KeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png | 4 +- ...KeyView-Day-7_8_null_4,NEXUS_5,1.0,de].png | 4 +- ...wChange-Day-6_7_null_0,NEXUS_5,1.0,de].png | 4 +- ...wChange-Day-6_7_null_1,NEXUS_5,1.0,de].png | 4 +- ...ileView-Day-0_1_null_0,NEXUS_5,1.0,de].png | 3 + ...ileView-Day-0_1_null_1,NEXUS_5,1.0,de].png | 3 + ...ileView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 3 + ...ileView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 3 + ...ileView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 3 + ...ileView-Day-0_1_null_5,NEXUS_5,1.0,de].png | 3 + ...ileView-Day-0_1_null_6,NEXUS_5,1.0,de].png | 3 + ...ectView-Day-0_1_null_2,NEXUS_5,1.0,de].png | 4 +- ...ectView-Day-0_1_null_3,NEXUS_5,1.0,de].png | 4 +- ...ectView-Day-0_1_null_4,NEXUS_5,1.0,de].png | 4 +- screenshots/html/data.js | 1173 +++++++++-------- ...oBlurShadow-Day_0_null,NEXUS_5,1.0,en].png | 4 +- 258 files changed, 925 insertions(+), 836 deletions(-) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_0,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_2,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-42_42_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-45_45_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-49_49_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-60_60_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-62_62_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-63_63_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_8,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-27_27_null,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-28_28_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-31_31_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-32_32_null,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_6,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,de].png} (100%) delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,de].png delete mode 100644 screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,de].png rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,de].png} (100%) rename screenshots/de/{ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,de].png => ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,de].png} (100%) create mode 100644 screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,de].png create mode 100644 screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,de].png diff --git a/features/analytics/api/src/main/res/values-de/translations.xml b/features/analytics/api/src/main/res/values-de/translations.xml index e4f5952ae0..ec26ff08fc 100644 --- a/features/analytics/api/src/main/res/values-de/translations.xml +++ b/features/analytics/api/src/main/res/values-de/translations.xml @@ -1,7 +1,7 @@ "Teile anonyme Nutzungsdaten, um uns bei der Identifizierung von Problemen zu helfen." - "Du kannst alle unsere Bedingungen lesen %1$s." + "Weitere Informationen findest du %1$s ." "hier" "Analysedaten teilen" diff --git a/features/analytics/impl/src/main/res/values-de/translations.xml b/features/analytics/impl/src/main/res/values-de/translations.xml index 74eff06c69..e2180092d9 100644 --- a/features/analytics/impl/src/main/res/values-de/translations.xml +++ b/features/analytics/impl/src/main/res/values-de/translations.xml @@ -2,7 +2,7 @@ "Wir zeichnen keine persönlichen Daten auf und erstellen keine Profile." "Teile anonyme Nutzungsdaten, um uns bei der Identifizierung von Problemen zu helfen." - "Du kannst alle unsere Bedingungen lesen %1$s." + "Weitere Informationen findest du %1$s ." "hier" "Du kannst diese Funktion jederzeit deaktivieren" "Wir geben deine Daten nicht an Dritte weiter" diff --git a/features/ftue/impl/src/main/res/values-fr/translations.xml b/features/ftue/impl/src/main/res/values-fr/translations.xml index a5e4caedfc..c69b729fc7 100644 --- a/features/ftue/impl/src/main/res/values-fr/translations.xml +++ b/features/ftue/impl/src/main/res/values-fr/translations.xml @@ -2,7 +2,15 @@ "Vous pourrez modifier vos paramètres ultérieurement." "Autorisez les notifications et ne manquez aucun message" - "Établissement de la connexion" + "Établissement d’une connexion sécurisée" + "Aucune connexion sécurisée n’a pu être établie avec la nouvelle session. Vos sessions existantes sont toujours en sécurité et vous n’avez pas à vous en soucier." + "Et maintenant ?" + "Essayez de vous connecter à nouveau à l’aide du code QR au cas où il s’agirait d’un problème réseau" + "Si vous rencontrez le même problème, essayez un autre réseau wifi ou utilisez vos données mobiles au lieu du wifi" + "Si cela ne fonctionne pas, connectez-vous manuellement" + "La connexion n’est pas sécurisée" + "Il vous sera demandé de saisir les deux chiffres affichés sur cet appareil." + "Saisissez le nombre ci-dessous sur votre autre appareil" "Ouvrez %1$s sur un ordinateur" "Cliquez sur votre image de profil" "Choisissez %1$s" @@ -12,7 +20,15 @@ "Scannez le QR code affiché sur l’autre appareil." "Essayer à nouveau" "QR code erroné" + "Accéder aux paramètres de l’appareil photo" + "Vous devez autoriser %1$s à utiliser la camera de votre appareil pour continuer." + "Autoriser l’usage de la caméra pour scanner le code QR" "Scannez le QR code" + "Recommencer" + "Une erreur inattendue s’est produite. Veuillez réessayer." + "En attente de votre autre session" + "Votre fournisseur de compte peut vous demander le code suivant pour vérifier la connexion." + "Votre code de vérification" "Les appels, les sondages, les recherches et plus encore seront ajoutés plus tard cette année." "L’historique des messages pour les salons chiffrés ne sera pas disponible dans cette mise à jour." "N’hésitez pas à nous faire part de vos commentaires via l’écran des paramètres." diff --git a/features/leaveroom/api/src/main/res/values-sv/translations.xml b/features/leaveroom/api/src/main/res/values-sv/translations.xml index c60389e24b..c80d716329 100644 --- a/features/leaveroom/api/src/main/res/values-sv/translations.xml +++ b/features/leaveroom/api/src/main/res/values-sv/translations.xml @@ -1,5 +1,6 @@ + "Är du säker på att du vill lämna den här konversationen? Den här konversationen är inte offentlig och du kommer inte att kunna gå med igen utan en inbjudan." "Är du säker på att du vill lämna det här rummet? Du är den enda personen här. Om du lämnar kommer ingen att kunna gå med i framtiden, inklusive du." "Är du säker på att du vill lämna det här rummet? Detta rum är inte offentligt och du kommer inte att kunna gå med igen utan en inbjudan." "Är du säker på att du vill lämna rummet?" diff --git a/features/lockscreen/impl/src/main/res/values-fr/translations.xml b/features/lockscreen/impl/src/main/res/values-fr/translations.xml index df95f43648..94e65cc6f0 100644 --- a/features/lockscreen/impl/src/main/res/values-fr/translations.xml +++ b/features/lockscreen/impl/src/main/res/values-fr/translations.xml @@ -1,7 +1,7 @@ - "Authentification biométrique" - "Déverrouillage biométrique" + "authentification biométrique" + "déverrouillage biométrique" "Déverrouiller avec la biométrie" "Code PIN oublié?" "Modifier le code PIN" diff --git a/features/lockscreen/impl/src/main/res/values-zh-rTW/translations.xml b/features/lockscreen/impl/src/main/res/values-zh-rTW/translations.xml index 2f479b97d1..757604c4f4 100644 --- a/features/lockscreen/impl/src/main/res/values-zh-rTW/translations.xml +++ b/features/lockscreen/impl/src/main/res/values-zh-rTW/translations.xml @@ -15,6 +15,9 @@ "確認 PIN 碼" "基於安全性的考量,您選的 PIN 碼無法使用" "選擇不一樣的 PIN 碼" + "將 %1$s 上鎖,為你的聊天室添加一層防護。 + +請選擇好記憶的數字。如果忘記 PIN 碼,您會被登出。" "請輸入相同的 PIN 碼兩次" "PIN 碼不一樣" "您需要重新登入並建立新的 PIN 碼才能繼續" diff --git a/features/login/impl/src/main/res/values-fr/translations.xml b/features/login/impl/src/main/res/values-fr/translations.xml index 3a882ae965..01f11edaf6 100644 --- a/features/login/impl/src/main/res/values-fr/translations.xml +++ b/features/login/impl/src/main/res/values-fr/translations.xml @@ -14,7 +14,8 @@ "Utilisez un autre fournisseur de compte, tel que votre propre serveur privé ou un serveur professionnel." "Changer de fournisseur de compte" "Nous n’avons pas pu atteindre ce serveur d’accueil. Vérifiez que vous avez correctement saisi l’URL du serveur d’accueil. Si l’URL est correcte, contactez l’administrateur de votre serveur d’accueil pour obtenir de l’aide." - "Sliding sync n’est pas disponible en raison d’un problème dans le well-known file : %1$s" + "Sliding sync n’est pas disponible en raison d’un problème dans le well-known file : +%1$s" "Ce serveur ne prend actuellement pas en charge la synchronisation glissante." "URL du serveur d’accueil" "Vous ne pouvez vous connecter qu’à un serveur existant qui prend en charge le sliding sync. L’administrateur de votre serveur d’accueil devra le configurer. %1$s" diff --git a/features/messages/impl/src/main/res/values-sv/translations.xml b/features/messages/impl/src/main/res/values-sv/translations.xml index 72b6596743..c2ca9678e3 100644 --- a/features/messages/impl/src/main/res/values-sv/translations.xml +++ b/features/messages/impl/src/main/res/values-sv/translations.xml @@ -41,4 +41,13 @@ "%1$d rumsändring" "%1$d rumsändringar" + + "%1$s, %2$s och %3$d annan" + "%1$s, %2$s och %3$d andra" + + + "%1$s skriver" + "%1$s skriver" + + "%1$s och %2$s" diff --git a/features/poll/impl/src/main/res/values-sv/translations.xml b/features/poll/impl/src/main/res/values-sv/translations.xml index 80f8a23ca9..f2116d1eef 100644 --- a/features/poll/impl/src/main/res/values-sv/translations.xml +++ b/features/poll/impl/src/main/res/values-sv/translations.xml @@ -4,8 +4,16 @@ "Visa resultat först efter att omröstningen avslutats" "Dölj röster" "Alternativ %1$d" + "Dina ändringar har inte sparats. Är du säker på att du vill gå tillbaka?" "Fråga eller ämne" "Vad handlar omröstningen om?" "Skapa omröstning" + "Är du säker på att du vill radera den här omröstningen?" + "Radera omröstning" "Redigera omröstning" + "Kan inte hitta några pågående omröstningar." + "Kan inte hitta några tidigare omröstningar." + "Pågående" + "Tidigare" + "Omröstningar" diff --git a/features/preferences/impl/src/main/res/values-sv/translations.xml b/features/preferences/impl/src/main/res/values-sv/translations.xml index aa4eea5a2e..adcb60f9d5 100644 --- a/features/preferences/impl/src/main/res/values-sv/translations.xml +++ b/features/preferences/impl/src/main/res/values-sv/translations.xml @@ -6,6 +6,11 @@ "Ange en anpassad bas-URL för Element Call." "Ogiltig URL, se till att du inkluderar protokollet (http/https) och rätt adress." "Inaktivera rik-text-redigeraren för att skriva Markdown manuellt." + "Läskvitton" + "Om det är avstängt kommer dina läskvitton inte att skickas till någon. Du kommer fortfarande att få läskvitton från andra användare." + "Dela närvaro" + "Om det är avstängt kan du inte skicka eller ta emot läskvitton eller skrivnotiser" + "Aktivera alternativet för att visa meddelandekälla i tidslinjen." "Avblockera" "Du kommer att kunna se alla meddelanden från dem igen." "Avblockera användare" @@ -31,6 +36,8 @@ Om du fortsätter kan vissa av dina inställningar ändras." "Aktivera aviseringar på den här enheten" "Konfigurationen har inte korrigerats, vänligen pröva igen." "Gruppchattar" + "Inbjudningar" + "Din hemserver stöder inte det här alternativet i krypterade rum, du kanske inte aviseras i vissa rum." "Omnämnanden" "Alla" "Omnämnanden" diff --git a/features/rageshake/impl/src/main/res/values-sv/translations.xml b/features/rageshake/impl/src/main/res/values-sv/translations.xml index dc307d4f30..0058b6519a 100644 --- a/features/rageshake/impl/src/main/res/values-sv/translations.xml +++ b/features/rageshake/impl/src/main/res/values-sv/translations.xml @@ -12,4 +12,5 @@ "Skicka skärmdump" "Loggar kommer att inkluderas i ditt meddelande för att se till att allt fungerar korrekt. Om du vill skicka ditt meddelande utan loggar stänger du av den här inställningen." "%1$s kraschade senast den användes. Vill du dela en kraschrapport med oss?" + "Se loggar" diff --git a/features/roomdetails/impl/src/main/res/values-sv/translations.xml b/features/roomdetails/impl/src/main/res/values-sv/translations.xml index 7bc9a16881..b8161c4108 100644 --- a/features/roomdetails/impl/src/main/res/values-sv/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-sv/translations.xml @@ -1,6 +1,8 @@ "Ett fel uppstod vid uppdatering av aviseringsinställningen." + "Din hemserver stöder inte det här alternativet i krypterade rum, du kanske inte aviseras i vissa rum." + "Omröstningar" "Alla" "Lägg till ämne" "Redan medlem" @@ -14,6 +16,7 @@ "Misslyckades att tysta det här rummet, vänligen pröva igen." "Misslyckades att avtysta det här rummet, vänligen pröva igen." "Bjud in personer" + "Lämna konversation" "Lämna rum" "Anpassad" "Förval" @@ -39,6 +42,7 @@ "Ett fel uppstod vid laddning av aviseringsinställningarna." "Misslyckades att återställa standardläget, vänligen försök igen." "Misslyckades att ställa in läget, vänligen pröva igen." + "Din hemserver stöder inte det här alternativet i krypterade rum, du blir inte aviserad i det här rummet." "Alla meddelanden" "Endast omnämnanden och nyckelord" "I det här rummet, meddela mig för" diff --git a/features/roomlist/impl/src/main/res/values-sv/translations.xml b/features/roomlist/impl/src/main/res/values-sv/translations.xml index 7253f19276..cc483e81da 100644 --- a/features/roomlist/impl/src/main/res/values-sv/translations.xml +++ b/features/roomlist/impl/src/main/res/values-sv/translations.xml @@ -13,8 +13,14 @@ "Skapa en ny konversation eller ett nytt rum" "Kom igång genom att skicka meddelanden till någon." "Inga chattar än." + "Favoriter" + "Låg prioritet" "Personer" + "Rum" + "Olästa" "Alla chattar" + "Markera som läst" + "Markera som oläst" "Det verkar som om du använder en ny enhet. Verifiera med en annan enhet för att komma åt dina krypterade meddelanden." "Verifiera att det är du" diff --git a/features/securebackup/impl/src/main/res/values-fr/translations.xml b/features/securebackup/impl/src/main/res/values-fr/translations.xml index 67ce8fe986..824e786cc4 100644 --- a/features/securebackup/impl/src/main/res/values-fr/translations.xml +++ b/features/securebackup/impl/src/main/res/values-fr/translations.xml @@ -25,7 +25,7 @@ "Êtes-vous certain de vouloir désactiver la sauvegarde?" "Obtenez une nouvelle clé de récupération dans le cas où vous avez oublié l’ancienne. Après le changement, l’ancienne clé ne sera plus utilisable." "Générer une nouvelle clé" - "Assurez-vous de conserver la clé dans un endroit sûr." + "Assurez-vous de conserver la clé dans un endroit sûr" "Clé de récupération modifée" "Changer la clé de récupération?" "Créer une nouvelle clé de récupération" @@ -46,9 +46,9 @@ "Sauvegarder la clé" "La clé ne pourra plus être affichée après cette étape." "Avez-vous sauvegardé votre clé de récupération?" - "Votre sauvegarde est protégée par votre clé de récupération. Si vous avez besoin d’une nouvelle clé après la configuration, vous pourrez en créer une nouvelle en cliquant sur \"Changer la clé de récupération\"" + "Votre sauvegarde est protégée par votre clé de récupération. Si vous avez besoin d’une nouvelle clé après la configuration, vous pourrez en créer une nouvelle en cliquant sur \"Changer la clé de récupération\"." "Générer la clé de récupération" - "Assurez-vous de pouvoir enregistrer votre clé dans un endroit sécurisé." + "Assurez-vous de pouvoir enregistrer votre clé dans un endroit sécurisé" "Sauvegarde mise en place avec succès" "Configurer la sauvegarde" diff --git a/features/securebackup/impl/src/main/res/values-sv/translations.xml b/features/securebackup/impl/src/main/res/values-sv/translations.xml index cf73f06c7b..a1b1512031 100644 --- a/features/securebackup/impl/src/main/res/values-sv/translations.xml +++ b/features/securebackup/impl/src/main/res/values-sv/translations.xml @@ -22,6 +22,7 @@ "Återställningsnyckel ändrad" "Byt återställningsnyckel?" "Se till att ingen kan se den här skärmen" + "Vänligen pröva igen för att bekräfta åtkomsten till din chattsäkerhetskopia." "Felaktig återställningsnyckel" "Om du har en säkerhetsnyckel eller säkerhetsfras så funkar den också." "Ange …" diff --git a/features/signedout/impl/src/main/res/values-fr/translations.xml b/features/signedout/impl/src/main/res/values-fr/translations.xml index 8b4c9b7461..e093df8517 100644 --- a/features/signedout/impl/src/main/res/values-fr/translations.xml +++ b/features/signedout/impl/src/main/res/values-fr/translations.xml @@ -3,6 +3,6 @@ "Le mot de passe de votre compte a été modifié sur un autre appareil" "Cette session a été supprimée depuis un autre appareil" "L’administrateur de votre serveur a révoqué votre accès." - "La déconnexion peut être due à une des raisons ci-dessous. Veuillez vous connecter à nouveau pour continuer à utiliser %1$s." + "La déconnexion peut être due à une des raisons ci-dessous. Veuillez vous connecter à nouveau pour continuer à utiliser %s." "Vous avez été déconnecté" diff --git a/features/verifysession/impl/src/main/res/values-sv/translations.xml b/features/verifysession/impl/src/main/res/values-sv/translations.xml index bac08c22a6..f1b2fcc6e5 100644 --- a/features/verifysession/impl/src/main/res/values-sv/translations.xml +++ b/features/verifysession/impl/src/main/res/values-sv/translations.xml @@ -3,6 +3,8 @@ "Något verkar inte stämma. Antingen gick tidsgränsen för begäran ut eller så avvisades begäran." "Bekräfta att emojierna nedan matchar de som visas på din andra session." "Jämför emojis" + "Bekräfta att siffrorna nedan matchar de som visas på din andra session." + "Jämför siffror" "Din nya session är nu verifierad. Den har tillgång till dina krypterade meddelanden, och andra användare kommer att se den som betrodd." "Bevisa att det är du för att komma åt din krypterade meddelandehistorik." "Öppna en befintlig session" diff --git a/libraries/eventformatter/impl/src/main/res/values-sv/translations.xml b/libraries/eventformatter/impl/src/main/res/values-sv/translations.xml index 756b11e81d..8e913a4e28 100644 --- a/libraries/eventformatter/impl/src/main/res/values-sv/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-sv/translations.xml @@ -39,6 +39,8 @@ "Du bytte rummets namn till: %1$s" "%1$s tog bort rummets namn" "Du tog bort rummets namn" + "%1$s gjorde inga ändringar" + "Du gjorde inga ändringar" "%1$s avvisade inbjudan" "Du avvisade inbjudan" "%1$s tog bort %2$s" diff --git a/libraries/push/impl/src/main/res/values-sv/translations.xml b/libraries/push/impl/src/main/res/values-sv/translations.xml index 717bf72246..6930a3b13e 100644 --- a/libraries/push/impl/src/main/res/values-sv/translations.xml +++ b/libraries/push/impl/src/main/res/values-sv/translations.xml @@ -20,12 +20,14 @@ "%d inbjudningar" "Bjöd in dig att chatta" + "Nämnde dig: %1$s" "Nya meddelanden" "%d nytt meddelande" "%d nya meddelanden" "Reagerade med %1$s" + "Markera som läst" "Snabbsvar" "Bjöd in dig att gå med i rummet" "Jag" diff --git a/libraries/ui-strings/src/main/res/values-fr/translations.xml b/libraries/ui-strings/src/main/res/values-fr/translations.xml index e3c91a8804..484d4835ae 100644 --- a/libraries/ui-strings/src/main/res/values-fr/translations.xml +++ b/libraries/ui-strings/src/main/res/values-fr/translations.xml @@ -240,6 +240,7 @@ "Échec du chargement des messages" "%1$s n’a pas pu accéder à votre position. Veuillez réessayer ultérieurement." "Échec lors de l’envoi du message vocal." + "Message introuvable" "%1$s n’est pas autorisé à accéder à votre position. Vous pouvez activer l’accès dans les Paramètres." "%1$s n’est pas autorisé à accéder à votre position. Activez l’accès ci-dessous." "%1$s n’a pas l’autorisation d’accéder au microphone. Autorisez l’accès pour enregistrer un message." @@ -261,6 +262,7 @@ "Débloquer" "Vous pourrez à nouveau voir tous ses messages." "Débloquer l’utilisateur" + "Discussion" "Partage de position" "Partager ma position" "Ouvrir dans Apple Maps" @@ -269,5 +271,5 @@ "Partager cette position" "Position" "Version : %1$s ( %2$s )" - "Ang." + "fr" diff --git a/libraries/ui-strings/src/main/res/values-sk/translations.xml b/libraries/ui-strings/src/main/res/values-sk/translations.xml index 8a2fdd1c5b..dbe16b1868 100644 --- a/libraries/ui-strings/src/main/res/values-sk/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sk/translations.xml @@ -265,6 +265,7 @@ "Odblokovať" "Všetky správy od nich budete môcť opäť vidieť." "Odblokovať používateľa" + "Konverzácia" "Zdieľať polohu" "Zdieľať moju polohu" "Otvoriť v Apple Maps" diff --git a/libraries/ui-strings/src/main/res/values-sv/translations.xml b/libraries/ui-strings/src/main/res/values-sv/translations.xml index 11bdb97932..c311a0fc2e 100644 --- a/libraries/ui-strings/src/main/res/values-sv/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sv/translations.xml @@ -6,18 +6,31 @@ "%1$d siffror angivna" "Dölj lösenord" + "Hoppa till botten" "Endast omnämningar" "Tystad" + "Sida %1$d" "Pausa" "PIN-fält" "Spela upp" "Omröstning" "Avslutade omröstning" + "Reagera med %1$s" + "Reagera med andra emojier" + "Läst av %1$s och %2$s" + + "Läst av %1$s och %2$d annan" + "Läst av %1$s och %2$d andra" + + "Läst av %1$s" + "Tryck för att visa alla" + "Ta bort reaktionen med %1$s" "Skicka filer" "Visa lösenord" "Starta ett samtal" "Användarmeny" "Spela in röstmeddelande." + "Stoppa inspelning" "Godkänn" "Lägg till i tidslinjen" "Tillbaka" @@ -34,6 +47,7 @@ "Skapa" "Skapa ett rum" "Neka" + "Radera omröstning" "Inaktivera" "Klar" "Redigera" @@ -51,7 +65,9 @@ "Gå med" "Läs mer" "Lämna" + "Lämna konversation" "Lämna rum" + "Ladda mer" "Hantera konto" "Hantera enheter" "Nästa" @@ -85,6 +101,7 @@ "Starta verifiering" "Tryck för att ladda kartan" "Ta ett foto" + "Tryck för alternativ" "Försök igen" "Visa källkod" "Ja" @@ -92,14 +109,17 @@ "Policy för godtagbar användning" "Avancerade inställningar" "Analysdata" + "Utseende" "Ljud" "Bubblor" "Chattsäkerhetskopia" "Upphovsrätt" "Skapar rum …" "Lämnade rummet" + "Mörkt" "Avkrypteringsfel" "Utvecklaralternativ" + "Direktchatt" "(redigerad)" "Redigerar" "* %1$s %2$s" @@ -107,6 +127,7 @@ "Ange din PIN-kod" "Fel" "Alla" + "Favorit" "Fil" "Fil sparad i Download" "Vidarebefordra meddelande" @@ -116,6 +137,7 @@ "Installera APK" "Det här Matrix-ID:t kan inte hittas, så inbjudan kanske inte tas emot." "Lämnar rummet" + "Ljust" "Länk kopierad till klippbordet" "Laddar …" @@ -123,6 +145,7 @@ "%1$d medlemmar" "Meddelande" + "Meddelandeåtgärder" "Meddelandearrangemang" "Meddelande borttaget" "Modernt" @@ -158,7 +181,10 @@ "Sök efter någon" "Sökresultat" "Säkerhet" + "Sett av" "Skickar …" + "Misslyckades att skicka" + "Skickat" "Servern stöds inte" "Server-URL" "Inställningar" @@ -169,6 +195,7 @@ "Lyckades" "Förslag" "Synkar" + "System" "Text" "Meddelanden från tredje part" "Tråd" diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index f25969332e..cede56abc3 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -262,6 +262,7 @@ "Unblock" "You\'ll be able to see all messages from them again." "Unblock user" + "Chat" "Share location" "Share my location" "Open in Apple Maps" diff --git a/screenshots/de/ui_T_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,de].png index 89e9eae62c..26ca94bd59 100644 --- a/screenshots/de/ui_T_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a194f30b289aeeb4df97f8e075d9ec966f46f538518eb217b7c816b29b50c2d6 -size 27024 +oid sha256:2ed345bc87543eead222c224bf505cbd457cf705b7928508f946ffae91441697 +size 26395 diff --git a/screenshots/de/ui_T_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,de].png index d298aa4e56..174d457c3e 100644 --- a/screenshots/de/ui_T_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b7c5b18c5dfc18081b4f433d8881b202d5afc1756b87bfc85fd10227e846c17 -size 101352 +oid sha256:9bd3cf5f667e12f371ac72374de54d70e3353da0329a5e53e35a954189b87529 +size 100540 diff --git a/screenshots/de/ui_T_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,de].png index 35432effdf..9be84adf08 100644 --- a/screenshots/de/ui_T_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c8a8dc04a794ea815902550dbda4fa85927277c78dae63ce0bfe11a3831c505 -size 32229 +oid sha256:50ee4c1a19583879a4cf157b2dbb98a3563cf150cab4af52b1d7ceec2a39efca +size 31803 diff --git a/screenshots/de/ui_T_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,de].png index 81462ede01..a119ade9e6 100644 --- a/screenshots/de/ui_T_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d14a57835df02b6da769c6bdb0e3e7151f2f9805c656a9e074005bc9239c708 -size 93828 +oid sha256:cf08251fee0361aab27f63071759a24975a39bd0edaa3e141ce55cf36aefeda2 +size 93407 diff --git a/screenshots/de/ui_T_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,de].png index 9f54444ccf..86516d5f1b 100644 --- a/screenshots/de/ui_T_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e7a8776ab3600066ecd2b5a560efe2c9b986146ab650260996c96ae2417eec6 -size 26600 +oid sha256:c1f2c05092276b798332b5a95b9f96ad8bd798ac56cd3c04b317ae4945c3ab96 +size 26248 diff --git a/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,de].png index 4dd574d947..0e055cf445 100644 --- a/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63a1d3f461d1b1e0368ba13ddb0bca94fcea0c06ef3e47888ea627d66cbb8fcb -size 73185 +oid sha256:ffcf366468b3bd18beb357e567b8c08a026251fa4ebde55c768187e8ab1cab82 +size 73043 diff --git a/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,de].png index 586499c195..d1d3e8792e 100644 --- a/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1f89b957b346c32398b5ee8162bf4197b03a2d9bc81628bf10397e145adf5c0 -size 91705 +oid sha256:61719138545393e23dba65a3f8565eb910d371f23ac1df06117e39f1658d10b0 +size 91265 diff --git a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png index a31d29b2b6..1a05fcf321 100644 --- a/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f31951220d86db47e538f69aee0bdcd5594e00553f5da9748ee2efac9fd67fa3 -size 134239 +oid sha256:268b45f12c99a9e1ff769b686a0208af2a7d8c6fa91b58fee9ba5c9ac76a2f2a +size 134013 diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,de].png index 2985e96ce6..38a8495863 100644 --- a/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa27f5f39f6f3342ca4f82b965184e8757f8323a7f067d7bc4c23c328c7ff9ea -size 37554 +oid sha256:9d695828953a26701f53aff359b03c0af79e9336497594db4d64f9eeed11c252 +size 37637 diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,de].png index 38e763abcf..c6d6da9330 100644 --- a/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:340a03a0cb175cc6f92c210c41dc5c754c612b2fc5ad6bb66ca258739c0335fc -size 37302 +oid sha256:40f9041f24881bd0ddf2e2f1fc46d7230a90d49427bf770447692769d91e3a31 +size 37386 diff --git a/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,de].png index d253a16d88..08af3eba65 100644 --- a/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:187d55d1554a5af4dafb6201dcd3d89f25ea614e5d3458a58780916fe5c8d2ee -size 38895 +oid sha256:5be2d9a6f5bf3c694e3d24b91f0a9d48275480423fd61982e063fdbfa8444cbc +size 38983 diff --git a/screenshots/de/ui_T_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,de].png index 0eeff4611d..576f9f1c25 100644 --- a/screenshots/de/ui_T_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c67bbcb7517525e730143e2f89ca1b2fe6dd817b501c27bffe8fe58d01e53294 -size 46032 +oid sha256:af69336bb89eba67b0a087839520016673ef2a144e0bb36a2d65ed7a1797cc62 +size 44383 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..f1294d0952 --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c33a74372cff1611bf099117c386123b433909a8c11051a7b223eff66cbb9aab +size 12576 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..1219c50048 --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d50c079ca51d999f4bf7ae31579d0ab556bc7edc35e2e7ca161488d72123fd6 +size 10093 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-42_42_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-42_42_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-45_45_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-45_45_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-49_49_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-49_49_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-60_60_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-60_60_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-62_62_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-62_62_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-63_63_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-63_63_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_8,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_8,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-27_27_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-27_27_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,de].png deleted file mode 100644 index 63de740f46..0000000000 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ab99773b57c7ed81a2182b2ff415cf105545b827f2eb939b93d1ef4dbd8614ca -size 14970 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..5f911cbde5 --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0384fd82b42c84ee803d6d62dd8209e5573767a3eff9e9fcccffe721d48d816e +size 24507 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-28_28_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-28_28_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-31_31_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-31_31_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-32_32_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-32_32_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..b27ef78d18 --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33968e625e0c6cbf0343b0e811708aabacfad73f6f2a208060e5c6017afbcc74 +size 14337 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..b27ef78d18 --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33968e625e0c6cbf0343b0e811708aabacfad73f6f2a208060e5c6017afbcc74 +size 14337 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..5d53795872 --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b5aff35cb059152a6e783733a3d569ee7b62f0b28dfc563b9bd203e9b1b5cbd +size 18846 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,de].png index 3ef0fc25d9..8a5cbb4082 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6583a6d3b253f0df4b76eac3cf105ac745a32cb89f86eb9671ead045a112b4f8 -size 53308 +oid sha256:7c1c7f156a30a2e608c0edcbc3668f4643f79077698d95e69e95fda2252525c2 +size 58252 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,de].png index 3a648c89b9..de2d5ae172 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3bb6528baf2d4e327043509057afc9a2fcbd0fd84d7f357006debf41728b59ee -size 75467 +oid sha256:5d8eeb8652f5219f47ec05eb5e7425d35bae4286c7c60fbdab73ffa5bdaee3a0 +size 78677 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,de].png index aa2044d37b..0372f6f5ce 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8dee3cba897a14f591047159bad92f697244ca4f17b421e17c21b663a1c2b1f4 -size 78691 +oid sha256:f01cd01ee7ee7e4b42e35b3bc830430f723d25b1c9f7b00b8dcd5da959f6a517 +size 94552 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,de].png index ae22a710b8..e37fc1160b 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a67220a19dbb00280ddae236e39021c17c8ffa10cdb6c4aa30c1caee44788548 -size 54823 +oid sha256:a7b17dbfe2bd093ebee5055c073d0e858031fcb0a2a421ae51548a5144f14eef +size 59620 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,de].png index 887c697b21..992f8d88f1 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02b87466c53a472adb386cd3af5bcbee29288319fb77ff72b18e61df9a692c49 -size 67123 +oid sha256:dd23471126be6ba2b3b2e974ac1c186581fcbcf60bab4e4fc251c7212bb0d641 +size 71177 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,de].png index ab7a2cc4db..746693dc7a 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28fe15bc22b59ba42336a2dd6c1eb318dfbeb0827f0df50abfcf1b2d6c23b65b -size 51101 +oid sha256:40f239a043c4521a6c96731071022f934bd8bda7d16ae6289b1c3cfb9569ee21 +size 56405 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,de].png index 9a7070b9c8..e253fc6c75 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a79814e18dbf223f063e0c491e1e92b8391954bc3876b2e20aec691d941c4de -size 75884 +oid sha256:69ce2e2538037806e9c7f586639b60bb2a0e8706700a169b779f5fc1a3e22dd0 +size 78800 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,de].png index f276204884..a4e4026273 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a94aaaea45a98dc1e4d92d7dafdd136459566bd6ae6c0643aa81b64278a4de60 -size 61456 +oid sha256:626c6edd2e3f1573686a70bc187d384df1e64ae0b02db74a73d7875a341f6baf +size 65344 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,de].png index 8cd2e5a55e..f9bf6cacc4 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:281814d332f0c6a910afaad18b9e5347d513e7f19ee221c4fbe68edd8f3464ab -size 73024 +oid sha256:59be314feac813cfe6da8ec83ca635ba761f1943f6d7cc36d5862606ed71062d +size 79776 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,de].png index eba6b2595d..872705d446 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d3d68f79d366c0cfbfba8a656b91889af849fedda35b2a1e91b206cbaa36c8d -size 75297 +oid sha256:e54972685e3388e50aba39d5fff7121bfccd191a5439b218e5e6911845c639b7 +size 82140 diff --git a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,de].png index 7680db57d4..75a680fc83 100644 --- a/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d012ef3de7327d00adc8de320e6a7378188263a4cebe5eed5c78913c8386a9eb -size 56939 +oid sha256:c376fd57369f8af401ec625d0d0cfa6b1c4ae12abd0217e73399b551c99157e4 +size 61379 diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index ce594daedd..0000000000 --- a/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0c49de1ecab028444034f35f332fe1076d640542e73c57c5b8b8498a574117fe -size 55297 diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index 8e7060941e..0000000000 --- a/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7a2e396808ea5dd448badf80571bc83010f9671881bb00d55a6187639d375c8d -size 56185 diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..bf1cca48e4 --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de65a3e7c185c9441541c634bf5c3ac0db5b5bde23bead865a1145015b8233f8 +size 64813 diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..9f803cac3c --- /dev/null +++ b/screenshots/de/ui_T_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa5485f5a048ceb8ce702512041a8fb329aa4b5163c2e631d65dac16d4d1835a +size 65738 diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,de].png index d3dbdd0335..489c4a7296 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f617b16e3cc089f8ffae1a73a2f716307831aff3af1422265c311dc57b12359f -size 57442 +oid sha256:43bfcbcec843c94ee5f371cceef3de290b6028eaf03a1904b8dbed48b92b06af +size 66738 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,de].png index 372aae2ece..8170c1e3d8 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f1be502846bde0c3be99cc6ef840da494e6c520a284c330492a04807cf068b8 -size 60021 +oid sha256:23380dd98ce0f1fc624e1495694a0972f9740a28f9411223ffbdea65a3c260cc +size 69276 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,de].png index 18ecbbadb6..63385bf1ad 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:683a11041c745714ed7e5668e302fe43e7fc2130cef4265fd555951bc23c971d -size 51854 +oid sha256:c13cc8a728776ed6f95dc6568892458d5818e9be884d86255ca7aff10ae9892f +size 54058 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,de].png index bc2c00a120..576eb9f937 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b567bb1946b2f88d3585294059667315854bfbf2ffb1bc644053f6303dab2970 -size 57452 +oid sha256:fc287905e17ed95afecdb1827db400c43413445c9847e7078b6c3d3aef8682b0 +size 66747 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,de].png index ff6f96cedc..cb099b5743 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4c4a24df82af80b13f09a8ac1fdf3ace0d31ba3185a682e5610c7af0992c0a7 -size 57579 +oid sha256:143d322bbd209071cfc0a569bb4c5707359c228df4783f66888bff56cd10e20d +size 67431 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,de].png index a1c9c07906..9dbdd4615d 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ded3c9ba2c417acdf7b99b7ef0a3dece456f9fdd435e81ce83bc6fec44197777 -size 59164 +oid sha256:251e1418c6c185e0f989ce5d41210bd64f81d9d66f76b684d950890f76e34ce2 +size 61738 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,de].png index 669506b57c..9fdf6f038b 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55aa3c859f67094542f0fb65f9abf254513e972da2bca9bbf2fb6b132c22993a -size 55233 +oid sha256:cff41dfef8e562b2e2392a883f406406a23143666509681e3607ad31c08a240a +size 64498 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,de].png index 201b51ad47..11f6914de5 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4402552646007437aad938367db47f5424f899a069e3fd0a3057db9482e0964 -size 54201 +oid sha256:4d38c329cce9b76fa4d6f36969d2c9ded75a9f1cfa14eca7706831312993ab7c +size 63963 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,de].png index 57f4d3fcdf..e3b69c1810 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43e8e81b01ff74ae8511d20854e4db8e90210116ea4e67be4cabadb8d285587b -size 63180 +oid sha256:3e7f25dc9e211d1084549265076ca78f4ca7508db84e26aca5d576529c11afe1 +size 65294 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,de].png index 2be19db365..a2f4003bd8 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b87d75fa760387be8e8bee9fa25a6ac9a647bce25fc53194ebcd4b81d4b49359 -size 45110 +oid sha256:016994095e4ccd72039e862cb3d1cad5287d080a4c67134b29f332aa089250dc +size 47383 diff --git a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,de].png index 89f6d4f897..cf5d3e4725 100644 --- a/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:938a4c749e7e9023ff34a6ff37064aa14c6e3ea63e816277a15610e27ec46f88 -size 44322 +oid sha256:53c59e0a24cfc895aad123f6da7f35d704c4459038b9f15042d364c4ed3edf5d +size 46600 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,de].png index 89b8314b6f..0eb2bd1341 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1953070cd97abd369fdee0c71ecd43c21814ec82b15544e1bbcbe92aaf3739a6 -size 31252 +oid sha256:d0e6df09100b164027f12c4658351ae0497d06e639814adf5b0f3971c47db4e4 +size 30508 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,de].png index c3a963c7a9..6a85552ff7 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a488aa7ab179160fa0e3b9d98b22c0a5d314b5c0c43bc5b52f8693aa5947bcd -size 53112 +oid sha256:43359fb6bddb7db8d5febba3528a7df757293b0b16cc0c4790f2621ce6d1a24a +size 52892 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,de].png index d72abfb4e7..eeb684d86e 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d259bc851bb9e1cb5a0c478082af87873a290523333935d1a3c7f1176c803b2 -size 54394 +oid sha256:421e1ed2bf2dc03ac25ef193b3e4c89c6957bb3c72725da8c4905a19ad6b1000 +size 54168 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,de].png index 7fbe676e68..911cb119ec 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24aa89db74c6593c86d79890a9cc82ac05345f08046229ffbb609a0eaa784099 -size 47078 +oid sha256:28b476d1c7de4fc8dfa3f9164cde3fd0d29286d6b0bdbd0fcc7fd94b58743f21 +size 46889 diff --git a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,de].png index b897b7d7bb..a70b3a750c 100644 --- a/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea367cfc65fdcb6bba98670276ef8419706768736587bd45814f41fd6b5a4e55 -size 71685 +oid sha256:e5258bf2a846a2c544f635f7e3990d97db80a1aaae17e1d6955f1deb5bcbf3e0 +size 71520 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..6be3c1195a --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9162e5a30a917ff54e92419134dce2b60d3e7f87f962a6a5fa2e4e7a8a7753be +size 32360 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..35cc7e98d3 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81b9e5b8eee8dba6b4fb166c269509c77f19ab1be48ebe5a7d98982c81998605 +size 26495 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..7676db9404 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa1b174d118d79076198174aa92bf4255f66c5de04638cf54f3b3e572cd253a5 +size 57738 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..9567900a73 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0705569901f8749d7cc59050361b1f8304a9f9007e0deccfd1cdddc8b36181cc +size 32181 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..ed16ba5dc0 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce62ee39c676a2856c3c30d84b969ea69ee6e00b474e721dacadb9ba0e0bf387 +size 32163 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..02ffa0dd9d --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dd3eda8c85591d3cd30359349a98463e4b6ea641e5719ff487bf516d26b4aa7 +size 29732 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index 2d46bb705e..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2bb90faf2dee52b881a6d64a90cf7134b0d53a3848f8ae94e786f76adff5ddda -size 32479 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index 901afeaed5..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1adf20d2ea867e69d3f5c0b113f7626f6c8a81c8a32f6d38a5a10029f4041085 -size 26615 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,de].png deleted file mode 100644 index 912e9ec888..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1a04103f9729f28ce395f61688caa70f30e6d7e5fa3ab0354685d9168e8370fa -size 57853 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index f585bc3dda..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bf4efd564bfaa181e08847e923f8643bbca6d1b370800090379d863b5db37d87 -size 32301 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index 41065b7d10..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9839d3f488deb046c13d245af06943c0259904efd0c9d00e4469d3bdc4812aaf -size 32283 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,de].png deleted file mode 100644 index e48068ad06..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:24b15c344d0f3b6260b4fe7c549606fc61b0efd7e982d479b2a33de459d1aa5a -size 29855 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..e19f51e013 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:247d5b1d5757c0b6643b9c1bc84e3df5e49476891cab652cd55ddbac6edc903c +size 31843 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..9e11d9b223 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48a301a5452a2bbd26c67d411981bbbd9d9e289f3b154bc1a981b3f23421389b +size 29055 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..dbb30c4aae --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c90b0a3816d06cd11cbe4fb5ddc147d0b7324db0db605e67b4022119df90bc0 +size 48340 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..cd878d2d4b --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e3fb93cb4af5e9f1d61fa5fc1874d0d9fe3148115a34386cad99ded1964a358 +size 47120 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index 629b44f2d7..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:971f27323b178cb4c6306ccd371a1ca531398c8693d05d3fc342062b4fd1a074 -size 32272 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index 8aba4bc4a0..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7fe753f169c1112a2cc47b8f5b3188c0e44c9c78e534149993f4f7537036de4c -size 29470 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,de].png deleted file mode 100644 index 1d2e46a113..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3b51157306c0939af7e4ee3fc6eb66865d2b28f48059c8c2abdd73ada2a01bb1 -size 48575 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,de].png deleted file mode 100644 index b90c13aec3..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d0d0e312aeb18786628902f70ed0e78c23be2ec99a8eacc71011cac0cff0b16f -size 46715 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index c6dc6957d5..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b49977a3f0f62fa9ed4d411bee74e7aa624ad6faa94ce8a34c9687b987f9971c -size 15673 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index 9b763fdb7b..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:08d8b3092ba9ff1014d8a194c3e4f91e93a2d6544e32dae39958dbf77a440adf -size 14193 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,de].png deleted file mode 100644 index 09265aeb22..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5b8841e48d962401f15d0a6e00e90d5ac4a24fef132e3031ad9a4fa2af078338 -size 15888 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index c9de7cba7d..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ee8a1900cc2b45849b1cc3c1c3645ad1864568a63a6c4e41bbdf3bcb37a9ca9 -size 25822 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index aa3ded9e8e..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:099434f2fbed91cd49a1f9d5aea5316c1159534d87c3bbdcd1639ee7074ccb60 -size 23987 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,de].png deleted file mode 100644 index 501046509b..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ac1444ebbf7e53a4f8939830999b2cd624baabc42970890920ed32e8deba9e44 -size 16114 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,de].png deleted file mode 100644 index bb6fd976b4..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:95761475720dc24e4a6f2f9b64789e828d5af9055578d4f3e468544a781c7077 -size 16855 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index e44953d5bd..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4be002ab23521fbc0376a51cf9aaaf84d5f5300deb6f57ec8f7566edacb7ad43 -size 16103 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index e4184e45ae..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b114f70c7809643c8e52ead5c8ff7e11600f5b85e966e2dd09115d028dbd2ea1 -size 14536 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,de].png deleted file mode 100644 index 04bc2a0a0d..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eaaab680d96ee1e4c8a69f30e53ac819db9fd89546705538d201d2e45383b04c -size 16480 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index 2301c0754d..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f6438eb7ed2e611e6068188ec2ce754056a9c589f78212af261bba2d9e2d7edb -size 28221 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index 6b3662a96a..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:25cba4db85d65a722f2d5cb59f23581913be45b77e98f516fd2ed694093e1f82 -size 26423 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,de].png deleted file mode 100644 index 004a33bbc7..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fb3f352dda652cc911fd469fb249e23f642e79f8eb9a025cd95a7ccff9ea5e47 -size 16773 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,de].png deleted file mode 100644 index acb8ff73db..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:77a04671e536ded186bd6127249288dc14caeff519a0fcbd1c6b8a496d34e3f1 -size 18936 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,de].png deleted file mode 100644 index 8b2709831f..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:df76452cb18791c0d06229fb9acb1b8964dbc6ed61bb6308daadbd57bd9fab08 -size 79032 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,de].png deleted file mode 100644 index 521b79a0a7..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:470cb6688022146dd58fe90db6172bd51ddddfd0bcc749601c2ad9b52ffb6f13 -size 59284 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,de].png deleted file mode 100644 index bc6fdf61b0..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d001460a98fd62286e8d078742b88593dca0b5a58acd170ae2ced4cbc7929c6 -size 72277 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index 9c723ed2c8..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2a5d49bf6b566bef906484d0906712ed45930cef4159bf2447c71c7cb66d5d54 -size 72057 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index 82bdbd0698..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ad1175ad17b137d7e256275f06036c162351b3aa65034e703da510b0792f903 -size 66444 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,de].png deleted file mode 100644 index d0a5179f28..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d1e43a716508869638761d686fcfbdd790af2105069641e7a7af9f97f29d0fbc -size 71402 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,de].png deleted file mode 100644 index 632c88119c..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0a9da25fddf7f20e9db2d88eca47a4a8eb74455ae529cf3170f6c5ca0fe6c926 -size 73630 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,de].png deleted file mode 100644 index 0b565eb5d1..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:337e6c9b19e8b92ed97cca61448ce3595cf9210724c7bb6c62c85c2bc24955f5 -size 63407 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,de].png deleted file mode 100644 index b313c4c9bf..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7d12f3919123740ecd72ceb4ec4b71813eefe1ee656f4aba786fed01215d8e09 -size 74634 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..85bf2ab1d5 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07ca71d9ac05db50c5c9edf562759347cba5a4436e855d9b24db595d75be97ee +size 79235 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..eb827eae41 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46ff59c7a99457ff642811f7d76a73eb127a05423865b295c21cbc9b56d8ab46 +size 58950 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..890d6ed498 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4e7e1251137c699da2e2a5af237ca5abe61ed03df7dcb3fa5d6ce2f546d66fb +size 71963 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..13366fc9d0 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d487faea48e3ebe45214c4ae4793578fc8e98993973035c3c2791d6bb0d33cfe +size 71773 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..e815bfe654 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cc9a2cc60627d5f08486796072b790ab48f88727f0ec51f74b15cf093aa1ca7 +size 66302 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..f2bd089aff --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7d433825c009bb48bde3288a6a4d1a24880e09712d172c01f70929214ef877a +size 71404 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..d60cc15d2b --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f937bc80b8ade9a3ffa34660dee391c0b6abeb43cf1703e591c9f72db51c4210 +size 73061 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..a586cc9391 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ec515ee74812e3af31151f910507c4ec5cbaebf1479bd678f53f4211d7b47e7 +size 62926 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..8f03584007 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:887faae6074328d5df87c162510bc5a26c90d5e04a91c9d1d8fedd889dfd4a19 +size 74269 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..c68678c6b8 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:380b0a5ee4001ff74fa8b54fcc5885d4756514b2dbb10c9560710f0c27bc5cc4 +size 48525 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..833cec72f7 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:547bb65de0cba6216f654ae6809db87cb2aeb15c881f807c796afd31f0a7da25 +size 48419 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..be28507b63 --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4a85ec155d35c875b21130505e8960578e1e7043abb1c49a35de39b62e9f572 +size 46484 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..c08c2db62f --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36ce1a8035422e6a5a6dbc1c45705630c50a25fd0659b9a4b828d8a20411c491 +size 46966 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..6237f06d3c --- /dev/null +++ b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04f9efad21c2b7b35563abc9187e594fbf9ff7e2dff73b1a394f5084deb51549 +size 56323 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,de].png deleted file mode 100644 index 01b60f2643..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19f67324516d939da2978432547a47aad6a5774a2e46911a1cab6431b61317b2 -size 48774 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,de].png deleted file mode 100644 index 6089d07340..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:822f5216161fb652f6a02bef5d7285b59759d089ea6208b63e24285e07c42aa2 -size 48679 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,de].png deleted file mode 100644 index de56e2959a..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:70d4171f9c67f4753cd833fa99a0cf9142c929ef3bd55fdb31a715e16efec616 -size 46757 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,de].png deleted file mode 100644 index a44162759c..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7263fb5cad4d16c45783e0c07c399277f9f318e7bd11826fddd938afdadf82a2 -size 47244 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,de].png deleted file mode 100644 index 792bf175ea..0000000000 --- a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,de].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5036efb20f9392e96e1454457054bd72d51d290bb2d652d0c88a658cc71f2be1 -size 56577 diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,de].png similarity index 100% rename from screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,de].png rename to screenshots/de/ui_T_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,de].png diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png index df3e81cb70..80574a2a6d 100644 --- a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e210ba4dcf69943334574d2db5cfe02c61c359a65f54ec69859acbd533f918d6 -size 14989 +oid sha256:e2cbc030bd8a1ae3b1ad29a0ca33fa9b8810f2871829f1671f2762232d05667e +size 14780 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png index 4cb38e4b38..37b5b86f31 100644 --- a/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3035259f77d3d5167c0048c9a8ad8fc31e5f63bfcc9eaa3e9ab6194d3860d7da -size 25620 +oid sha256:0324adc54ede8770952dd0d5e9a1561673be85e8bf6d3e51a3b90cf609564e8a +size 25422 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,de].png index 38c6d5e100..02b8a2079d 100644 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da9cdff275e86d57e4bce13da259113e2bcfe7612f9bd94251f0db9178bd5e47 -size 24022 +oid sha256:1f27aa2200692b1915f2fc8dad219ad2d2511d5a5c99bfc7aa36fc483d2811d3 +size 23788 diff --git a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,de].png index 7a21a69da5..00a544c796 100644 --- a/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:569d900fbd054603d44637839fe55f2f7379a3fb572f5dd9312aa7e4addbafd7 -size 26254 +oid sha256:3311a733707110c297fe092dac8f1944d63a35bdf9addb3d1c7edf2c0b4273e8 +size 26009 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,de].png index defba5df9a..243fe6f98b 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28b079bc23c422c9a767a655cf77d0fb785d8bbcdc8bdea92a3dc3fe91da41ca -size 76111 +oid sha256:224d4d9ca60954a2e6aa447f176e82f5aec0e3aaf3185dc550395f348281821f +size 75436 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,de].png index 0b014b6883..4f96db916a 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea3c359358ef3f402c2c7219ad5f09073f0fe7d9d97ea7cc68ad11cdc54222a7 -size 57971 +oid sha256:32cd877edd104fe2aeb63762b631345d7076c97096ed85b2b4f5e4d3519c3b6e +size 58029 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,de].png index 7ae7da2ccd..0a6c1b8c42 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7cc27eb6d12beab3b2b05bd8b908f585d02835ad47a2e071ba7d02d2922e7f0 -size 76589 +oid sha256:ef376dff3bb5bd7fc00b82269baa4f7b6883e8703b04d46dc5a966ac00c29522 +size 75922 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,de].png index cf722ad2c5..bb390d574a 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f02f0ee70c7376b00fbe3dce34cc8f699db45de3384619cee02cfef44802e0c7 -size 46219 +oid sha256:37aa3285ed6fe0933861f2cb1816cc0d1789cdab982d5a05db4c9c7bab6a897f +size 46179 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png index 58e0f04b70..244d8f669c 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:462fbb453fb06effbf1c1356d757ebf4def9c722d099e8b1a2ebcdf1a9a239df -size 50203 +oid sha256:b307da6cbc80c73377cb2aa9bda9fc12d406b5cfefaf108dca30f2444718f2c0 +size 50257 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png index bfdce8cf42..65a98963b2 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f22202ed861efcc57943290f264018b3e54b0c60cdd63f11ab27b93eb9faa6e -size 61624 +oid sha256:652b99b6eeb530e006434a3c97ad805327fc50803f095fa7580ecfe937adb35b +size 61681 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png index ab33ab81f0..a89374f79f 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d6eb1175fbd118ee6e454789b44a4c85c1b66d1e582a2d93d2de82f9d24b7a1 -size 59477 +oid sha256:915908703d70eb093c84cfd02ce000e30191b961ea4e17f0334b3745963c0c3d +size 59449 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png index 23095a682b..8d99c16c19 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f47f4b98a7f9b1e62628fac73db76875d4b3f35125082e0a9fb374946359f13b -size 48032 +oid sha256:01d6be420b033d14ee908c030a9099baf4edca5cde656e75b8f624d0b1e874da +size 48058 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,de].png index 9edbce8972..c290043657 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ffef63d7b63588193e346713f4898bd5b7cf5e8103a9440662f56e7b4897d38 -size 30826 +oid sha256:dde7780e24eb315b8671ada81dfc93397a2c7f324198d66cd17046d12d1ac3e0 +size 29115 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,de].png index 9348b1ee75..1fcedfd9fa 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d6170a0b30d26402d4a3ad0b03726bd1b6516b8be11df9afdc1f0694b335e3d -size 71555 +oid sha256:5847150559892bce2a0ea1018b5e37a51fab04d358aa2d6ed4035bf4462e245f +size 69243 diff --git a/screenshots/de/ui_T_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,de].png index 049e722748..08cbbfcfac 100644 --- a/screenshots/de/ui_T_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:097cb77dfb0a94e55df368d1d9048ec644e6dd3e7c82e8d214f80deb1e2fbffa -size 69111 +oid sha256:d31f5587e67f1a16fd829c7106f837f037bab704802b3203ffed28b2e84482e9 +size 65775 diff --git a/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..aa9894c978 --- /dev/null +++ b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31040b2d573029b5a412dde7605e29b5098f895e8d3e86d646fa485203e71992 +size 24989 diff --git a/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..5a6c028f58 --- /dev/null +++ b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0426f5b82ee1469bead50b8c925646c20aa16a270f2f07b2c86cf595a7de6b20 +size 22561 diff --git a/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..c6641e6d07 --- /dev/null +++ b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf5b10d4453bac71209799f8e68bfd41985c12bcd19d81ee0b81a34c7854d948 +size 25513 diff --git a/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..fdc900b35e --- /dev/null +++ b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:595dde5f7198f76dea6ac81feacd3a35985a1ee203950a81e9d72fec52c57a3b +size 48375 diff --git a/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..0d5055b3a1 --- /dev/null +++ b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b83ffc3f04e84bdd8a6a81a5240272509b55796ae610a77e04e55db616a72f02 +size 42634 diff --git a/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..90ed8002d5 --- /dev/null +++ b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83662f34669ebdf973e03383fe455129910d493ef79c5b09ea5235978d5fd0ab +size 26112 diff --git a/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,de].png new file mode 100644 index 0000000000..e24661cc00 --- /dev/null +++ b/screenshots/de/ui_T_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,de].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c430dcbfe7123f2dcdb0dbce1de011506438799f189e4a92d0d590921427eb7 +size 27839 diff --git a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,de].png index 8f8385973c..f7b1767523 100644 --- a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52d0b7cef2aaed644a079a16d16b64bcfdde03921085693fe65b346de9c91d43 -size 34292 +oid sha256:83ddecbf9604718b81e103b80067bd3cc8b4154d4a9756a5e6e9d981f605ed47 +size 34051 diff --git a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,de].png index 2cadc1ac83..7bae52facb 100644 --- a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd23760ea490c2baead0537b868635cc7ca6b4fe980549823e4bd998dc3d4c9e -size 32391 +oid sha256:5ae7f678c5b3a6640418c62b27f947634d817800eaa43c553a69d6a50d4c3d52 +size 32173 diff --git a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,de].png b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,de].png index 871c7854ef..cc4fbf074a 100644 --- a/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,de].png +++ b/screenshots/de/ui_T_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,de].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7e18545ffdcb7fbccd6e4c3075cd25d4e3bf598d8fb1a7db24949eb378e0d15 -size 36732 +oid sha256:6a25b117fb479c491e098d092dff4a60aaeef6a9aad1f3b66a799e5aef26389b +size 36529 diff --git a/screenshots/html/data.js b/screenshots/html/data.js index 2fcdc832ea..c492a1045f 100644 --- a/screenshots/html/data.js +++ b/screenshots/html/data.js @@ -1,40 +1,40 @@ // Generated file, do not edit export const screenshots = [ ["en","en-dark","de",], -["ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.about_AboutView_null_AboutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.invite.impl.response_AcceptDeclineInviteView_null_AcceptDeclineInviteView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.accountprovider_AccountProviderView_null_AccountProviderView-Night-0_2_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Night-0_2_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.addpeople_AddPeopleView_null_AddPeopleView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.advanced_AdvancedSettingsView_null_AdvancedSettingsView-Night-1_3_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.impl_AnalyticsOptInView_null_AnalyticsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.analytics.api.preferences_AnalyticsPreferencesView_null_AnalyticsPreferencesView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.analytics_AnalyticsSettingsView_null_AnalyticsSettingsView-Night-2_4_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[services.apperror.impl_AppErrorView_null_AppErrorView-Night-0_2_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_0,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_1,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_1,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_1,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_2,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_3,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Day_0_null_4,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncActionView_null_AsyncActionView-Night_1_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Night_1_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncFailure_null_AsyncFailure-Night_1_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncIndicatorFailure_null_AsyncIndicatorFailure-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncIndicatorLoading_null_AsyncIndicatorLoading-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.async_AsyncLoading_null_AsyncLoading-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.async_AsyncLoading_null_AsyncLoading-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Day-4_4_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Night-4_5_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Day-4_4_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_AttachmentSourcePickerMenu_null_AttachmentSourcePickerMenu-Night-4_5_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_2,NEXUS_5,1.0,en]",0,], @@ -44,11 +44,11 @@ export const screenshots = [ ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_6,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_7,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AttachmentThumbnail_null_AttachmentThumbnail-Night-0_2_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_0,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_1,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_2,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_3,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Night-1_3_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_0,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_1,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_2,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.messages.impl.attachments.preview_AttachmentsPreviewView_null_AttachmentsPreviewView_0_null_3,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_AvatarActionBottomSheet_null_AvatarActionBottomSheet-Night-1_3_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.avatar_Avatar_null_Avatars_Avatar_0_null_10,NEXUS_5,1.0,en]","",0,], @@ -115,12 +115,12 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.button_BackButton_null_Buttons_BackButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BigCheckmark_null_BigCheckmark-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_BigCheckmark_null_BigCheckmark-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_BigIcon_null_BigIcon-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_BigIcon_null_BigIcon-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_5,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_5,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Day-3_4_null_5,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.blockedusers_BlockedUsersView_null_BlockedUsersView-Night-3_5_null_5,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_2,NEXUS_5,1.0,en]","",0,], @@ -131,36 +131,36 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components_BloomInitials_null_Bloom_BloomInitials_0_null_7,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_Bloom_null_Bloom_Bloom_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_BottomSheetDragHandle_null_BottomSheetDragHandle-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.theme.components_BottomSheetDragHandle_null_BottomSheetDragHandle-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.impl.bugreport_BugReportView_null_BugReportView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.atomic.molecules_ButtonColumnMolecule_null_ButtonColumnMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_ButtonColumnMolecule_null_ButtonColumnMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.molecules_ButtonRowMolecule_null_ButtonRowMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_ButtonRowMolecule_null_ButtonRowMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.call.ui_CallScreenView_null_CallScreenView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.call.ui_CallScreenView_null_CallScreenView-Night-0_2_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_10,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_8,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_10_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_11_null_9,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_12_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_13_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_null_ChangeAccountProviderView-Night-4_6_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_10,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_6,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_7,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_8,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_9,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en]",19849,], ["ui_S_t[f.login.impl.changeserver_ChangeServerView_null_ChangeServerView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.changeserver_ChangeServerView_null_ChangeServerView-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_CheckableResolvedUserRow_null_CheckableResolvedUserRow_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.matrix.ui.components_CheckableUnresolvedUserRow_null_CheckableUnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.matrix.ui.components_CheckableUnresolvedUserRow_null_CheckableUnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19846,], ["ui_S_t[l.designsystem.theme.components_Checkboxes_null_Toggles_Checkboxes_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_CircularProgressIndicator_null_ProgressIndicators_CircularProgressIndicator_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_ClickableLinkText_null_Text_ClickableLinkText_0_null,NEXUS_5,1.0,en]","",0,], @@ -178,42 +178,42 @@ export const screenshots = [ ["ui_S_t[Typo_Compound_M3 Title Large,NEXUS_5,1.0,en]","",0,], ["ui_S_t[Typo_Compound_M3 Title Medium,NEXUS_5,1.0,en]","",0,], ["ui_S_t[Typo_Compound_M3 Title Small,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.configureroom_ConfigureRoomView_null_ConfigureRoomView-Night-3_5_null_1,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.preferences.impl.developer.tracing_ConfigureTracingView_null_ConfigureTracingView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer.tracing_ConfigureTracingView_null_ConfigureTracingView-Night-5_7_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Night-5_7_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-2_4_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_null_ConfirmAccountProviderView-Night-5_7_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_ConfirmRecoveryKeyBanner_null_ConfirmRecoveryKeyBanner-Night-2_4_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.dialogs_ConfirmationDialogContent_null_Dialogs_ConfirmationDialogContent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.networkmonitor.api.ui_ConnectivityIndicatorView_null_ConnectivityIndicatorView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.networkmonitor.api.ui_ConnectivityIndicatorView_null_ConnectivityIndicatorView-Night-0_2_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Night-0_2_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Night-0_2_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.designsystem.theme.components.previews_DatePickerDark_null_DateTimepickers_DatePickerDark_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[l.designsystem.theme.components.previews_DatePickerLight_null_DateTimepickers_DatePickerLight_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.crash_CrashDetectionView_null_CrashDetectionView-Night-0_2_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.createkey_CreateNewRecoveryKeyView_null_CreateNewRecoveryKeyView-Night-0_2_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.create_CreatePollView_null_CreatePollView-Night-0_2_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.root_CreateRoomRootView_null_CreateRoomRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.designsystem.theme.components.previews_DatePickerDark_null_DateTimepickers_DatePickerDark_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[l.designsystem.theme.components.previews_DatePickerLight_null_DateTimepickers_DatePickerLight_0_null,NEXUS_5,1.0,en]","",19846,], ["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_3,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl.direct_DefaultDirectLogoutView_null_DefaultDirectLogoutView-Night-1_3_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Night-7_9_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-5_7_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-4_6_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Night_1_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_DefaultNotificationSettingOption_null_DefaultNotificationSettingOption-Night-7_9_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_null_DefaultRoomListTopBarWithIndicator-Night-5_7_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_DefaultRoomListTopBar_null_DefaultRoomListTopBar-Night-4_6_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.developer_DeveloperSettingsView_null_DeveloperSettingsView-Night-4_6_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_DialogLikeBannerMolecule_null_DialogLikeBannerMolecule-Night_1_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.theme.components_DialogWithDestructiveButton_null_Dialogs_Dialogwithdestructivebutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DialogWithOnlyMessageAndOkButton_null_Dialogs_Dialogwithonlymessageandokbutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DialogWithThirdButton_null_Dialogs_Dialogwiththirdbutton_0_null,NEXUS_5,1.0,en]","",0,], @@ -224,35 +224,39 @@ export const screenshots = [ ["ui_S_t[l.designsystem.text_DpScale_1_0f__null_DpScale_1_0f__0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.text_DpScale_1_5f__null_DpScale_1_5f__0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_DropdownMenuItem_null_Menus_DropdownMenuItem_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Night-10_12_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_null_EditDefaultNotificationSettingView-Night-8_10_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user.editprofile_EditUserProfileView_null_EditUserProfileView-Night-10_12_null_0,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLarge_null_ElementLogoAtomLarge-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLarge_null_ElementLogoAtomLarge-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMediumNoBlurShadow_null_ElementLogoAtomMediumNoBlurShadow-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMediumNoBlurShadow_null_ElementLogoAtomMediumNoBlurShadow-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMedium_null_ElementLogoAtomMedium-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomMedium_null_ElementLogoAtomMedium-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-33_33_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-33_34_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-34_34_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-34_35_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-59_59_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-59_60_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-64_64_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-64_65_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Day-34_34_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiItem_null_EmojiItem-Night-34_35_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Day-35_35_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.customreaction_EmojiPicker_null_EmojiPicker-Night-35_36_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Day-60_60_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_EncryptedHistoryBannerView_null_EncryptedHistoryBannerView-Night-60_61_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Day-65_65_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.debug_EventDebugInfoView_null_EventDebugInfoView-Night-65_66_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_FilledButtonLarge_null_Buttons_FilledButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_FilledButtonMedium_null_Buttons_FilledButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_FilledButtonSmall_null_Buttons_FilledButtonSmall_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_FloatingActionButton_null_FloatingActionButtons_FloatingActionButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.atomic.pages_FlowStepPage_null_FlowStepPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_FlowStepPage_null_FlowStepPage-Night_1_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Day-66_66_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.focus_FocusRequestStateView_null_FocusRequestStateView-Night-66_67_null_3,NEXUS_5,1.0,en]",19849,], ["ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_FormattingOption_null_FormattingOption-Night-10_12_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Day-2_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.forward_ForwardMessagesView_null_ForwardMessagesView-Night-2_3_null_3,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_GradientFloatingActionButtonCircleShape_null_GradientFloatingActionButtonCircleShape-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.button_GradientFloatingActionButton_null_GradientFloatingActionButton-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_GradientFloatingActionButton_null_GradientFloatingActionButton-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-54_54_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-54_55_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Day-55_55_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.group_GroupHeaderView_null_GroupHeaderView-Night-55_56_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_HeaderFooterPage_null_HeaderFooterPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_HeaderFooterPage_null_HeaderFooterPage-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_HorizontalDivider_null_Dividers_HorizontalDivider_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.ruler_HorizontalRuler_null_HorizontalRuler-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_HorizontalRuler_null_HorizontalRuler-Night_1_null,NEXUS_5,1.0,en]",0,], @@ -270,27 +274,27 @@ export const screenshots = [ ["ui_S_t[l.designsystem.icons_IconsOther_null_IconsOther-Day_0_null_0,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.icons_IconsOther_null_IconsOther-Night_1_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.molecules_InfoListItemMolecule_null_InfoListItemMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_InfoListItemMolecule_null_InfoListItemMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.organisms_InfoListOrganism_null_InfoListOrganism-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.organisms_InfoListOrganism_null_InfoListOrganism-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_8,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_9,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_8,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_9,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components_LabelledCheckbox_null_Toggles_LabelledCheckbox_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components_LabelledOutlinedTextField_null_LabelledOutlinedTextField-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_LabelledOutlinedTextField_null_LabelledOutlinedTextField-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_LabelledTextField_null_LabelledTextField-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_LabelledTextField_null_LabelledTextField-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.leaveroom.api_LeaveRoomView_null_LeaveRoomView-Night-0_2_null_6,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_LinearProgressIndicator_null_ProgressIndicators_LinearProgressIndicator_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_Dialogs_ListDialogContent_0_null,NEXUS_5,1.0,en]","",0,], @@ -341,25 +345,25 @@ export const screenshots = [ ["ui_S_t[l.designsystem.theme.components_ListSupportingTextSmallPadding_null_Listsections_Listsupportingtext-smallpadding_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.components_LiveWaveformView_null_LiveWaveformView-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_LiveWaveformView_null_LiveWaveformView-Night-11_13_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.room.joined_LoadingRoomNodeView_null_LoadingRoomNodeView-Night-2_3_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.settings_LockScreenSettingsView_null_LockScreenSettingsView-Night-1_3_null_2,NEXUS_5,1.0,en]",19846,], ["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_8,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_9,NEXUS_5,1.0,en]",19839,], +["ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_LoggedInView_null_LoggedInView-Night-0_1_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.loginpassword_LoginPasswordView_null_LoginPasswordView-Night-6_8_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_8,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.logout.impl_LogoutView_null_LogoutView-Night-0_2_null_9,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.button_MainActionButton_null_Buttons_MainActionButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en]",0,], @@ -369,7 +373,7 @@ export const screenshots = [ ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_0,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_1,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_10,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_2,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_2,NEXUS_5,1.0,en]","",19846,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_3,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_4,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_5,NEXUS_5,1.0,en]","",0,], @@ -379,10 +383,10 @@ export const screenshots = [ ["ui_S_t[l.mediaviewer.api.viewer_MediaViewerView_null_MediaViewerView_0_null_9,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_MediumTopAppBar_null_AppBars_MediumTopAppBar_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.mentions_MentionSpan_null_MentionSpan-Day-18_19_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.mentions_MentionSpan_null_MentionSpan-Night-18_20_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Day-3_3_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.mentions_MentionSuggestionsPickerView_null_MentionSuggestionsPickerView-Night-3_4_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.theme.components.previews_Menu_null_Menus_Menu_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[f.messages.impl.messagecomposer_MessageComposerViewVoice_null_MessageComposerViewVoice-Day-6_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerViewVoice_null_MessageComposerViewVoice-Night-6_7_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Day-5_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Night-5_6_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Day-5_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.messagecomposer_MessageComposerView_null_MessageComposerView-Night-5_6_null_0,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Day-10_10_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessageEventBubble_null_MessageEventBubble-Night-10_11_null_10,NEXUS_5,1.0,en]",0,], @@ -406,25 +410,25 @@ export const screenshots = [ ["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Day-12_12_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_MessagesReactionButton_null_MessagesReactionButton-Night-12_13_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-65_65_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-65_66_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Day-67_67_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_MessagesViewWithTyping_null_MessagesViewWithTyping-Night-67_68_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_0,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-9_11_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_10,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_11,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_12,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_8,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Day-0_0_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl_MessagesView_null_MessagesView-Night-0_1_null_9,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.migration_MigrationScreenView_null_MigrationScreenView-Night-9_11_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.migration.impl_MigrationView_null_MigrationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetDark_null_BottomSheets_ModalBottomSheetDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetLayoutDark_null_BottomSheets_ModalBottomSheetLayoutDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_ModalBottomSheetLayoutLight_null_BottomSheets_ModalBottomSheetLayoutLight_0_null,NEXUS_5,1.0,en]","",0,], @@ -434,20 +438,20 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItemSelectedTrailingContent_null_Listitems_MultipleselectionListitem-selectionintrailingcontent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItemSelected_null_Listitems_MultipleselectionListitem-selectioninsupportingtext_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_MutipleSelectionListItem_null_Listitems_MultipleselectionListitem-noselection_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.notifications_NotificationSettingsView_null_NotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.notifications_NotificationsOptInView_null_NotificationsOptInView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Night-3_5_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.oidc.webview_OidcView_null_OidcView-Night-3_5_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_OnBoardingPage_null_OnBoardingPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_OnBoardingPage_null_OnBoardingPage-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.onboarding.impl_OnBoardingView_null_OnBoardingView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.background_OnboardingBackground_null_OnboardingBackground-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedButtonLarge_null_Buttons_OutlinedButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_OutlinedButtonMedium_null_Buttons_OutlinedButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], @@ -460,47 +464,47 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_3,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Day_0_null_4,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconFull_null_PageTitleWithIconFull-Night_1_null_4,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PageTitleWithIconMinimal_null_PageTitleWithIconMinimal-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_12_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_11_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.permissions.api_PermissionsView_null_PermissionsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.lockscreen.impl.components_PinEntryTextField_null_PinEntryTextField-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.components_PinEntryTextField_null_PinEntryTextField-Night-0_2_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components_PinIcon_null_PinIcon-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_PinIcon_null_PinIcon-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.lockscreen.impl.unlock.keypad_PinKeypad_null_PinKeypad-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock.keypad_PinKeypad_null_PinKeypad-Night-6_8_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockViewInApp_null_PinUnlockViewInApp-Night-4_6_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_5,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Day-5_6_null_6,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.unlock_PinUnlockView_null_PinUnlockView-Night-5_7_null_6,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.atomic.atoms_PlaceholderAtom_null_PlaceholderAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_PlaceholderAtom_null_PlaceholderAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_null_PollAnswerViewDisclosedNotSelected-Night-0_2_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewDisclosedSelected_null_PollAnswerViewDisclosedSelected-Night-1_3_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedSelected_null_PollAnswerViewEndedSelected-Night-6_8_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_null_PollAnswerViewEndedWinnerNotSelected-Night-4_6_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_null_PollAnswerViewEndedWinnerSelected-Night-5_7_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_null_PollAnswerViewUndisclosedNotSelected-Night-2_4_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_null_PollAnswerViewUndisclosedSelected-Night-3_5_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEditable_null_PollContentViewCreatorEditable-Night-10_12_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreatorEnded_null_PollContentViewCreatorEnded-Night-12_14_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Day-11_12_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewCreator_null_PollContentViewCreator-Night-11_13_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewDisclosed_null_PollContentViewDisclosed-Night-8_10_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewEnded_null_PollContentViewEnded-Night-9_11_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[f.poll.api.pollcontent_PollContentViewUndisclosed_null_PollContentViewUndisclosed-Night-7_9_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.preferences_PreferenceCategory_null_Preferences_PreferenceCategory_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceCheckbox_null_Preferences_PreferenceCheckbox_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceDivider_null_Preferences_PreferenceDivider_0_null,NEXUS_5,1.0,en]","",0,], @@ -516,172 +520,158 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.preferences_PreferenceTextLight_null_Preferences_PreferenceTextLight_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceTextWithEndBadgeDark_null_Preferences_PreferenceTextWithEndBadgeDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.preferences_PreferenceTextWithEndBadgeLight_null_Preferences_PreferenceTextWithEndBadgeLight_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-53_53_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-53_54_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Day-54_54_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_ProgressButton_null_ProgressButton-Night-54_55_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.theme.components_RadioButton_null_Toggles_RadioButton_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Night-1_3_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.detection_RageshakeDialogContent_null_RageshakeDialogContent-Night-1_3_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_0,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.rageshake.api.preferences_RageshakePreferencesView_null_RageshakePreferencesView-Night-2_4_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_2,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_3,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_4,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-57_57_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-57_58_null_5,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_10,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_11,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_8,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_9,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Day-58_58_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_null_ReadReceiptBottomSheet-Night-58_59_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_10,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_10,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_11,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_11,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_8,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Day-7_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup.views_RecoveryKeyView_null_RecoveryKeyView-Night-7_9_null_9,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.atomic.atoms_RedIndicatorAtom_null_RedIndicatorAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_RedIndicatorAtom_null_RedIndicatorAtom-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Day-15_15_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_ReplySwipeIndicator_null_ReplySwipeIndicator-Night-15_16_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-58_58_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-58_59_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_10_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Day-7_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.report_ReportMessageView_null_ReportMessageView-Night-7_8_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-59_60_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Day-59_59_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.retrysendmenu_RetrySendMessageMenu_null_RetrySendMessageMenu-Night-59_60_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_6,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_7,NEXUS_5,1.0,en]",19849,], ["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_0,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_1,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_2,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_3,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_4,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_5,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_6,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_7,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_8,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_1_null_9,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_0,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_1,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_2,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_3,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_4,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_5,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_6,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_7,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_8,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_0_null_9,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_3_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_6,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en]","",19849,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_6,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_7,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_1,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_3,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_4,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-3_5_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.filters_RoomListFiltersView_null_RoomListFiltersView-Night-8_10_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListModalBottomSheetContent_null_RoomListModalBottomSheetContent-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_2,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Day-10_11_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.search_RoomListSearchContent_null_RoomListSearchContent-Night-10_12_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_1,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_10,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_3,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_4,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_5,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_7,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_7,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_9,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_0,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_1,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_2,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_3,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_4,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_5,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewDark_null_RoomMemberDetailsViewDark--3_3_null_6,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_0,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_1,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_2,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_3,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_4,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_5,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members.details_RoomMemberDetailsViewLight_null_RoomMemberDetailsViewLight--2_2_null_6,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_5_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_8,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_5_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_6_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_7_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_7_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_8_null_6,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-1_2_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-1_3_null_9,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_6,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_7,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_6,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_7,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_8,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_6_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_6,NEXUS_5,1.0,en]",19849,], ["ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Night-1_3_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_RoomPrivacyOption_null_RoomPrivacyOption-Night-1_3_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.roomselect.impl_RoomSelectView_null_RoomSelectView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryPlaceholderRow_null_RoomSummaryPlaceholderRow-Night-6_8_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_1,NEXUS_5,1.0,en]",0,], @@ -695,7 +685,7 @@ export const screenshots = [ ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_17,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_17,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_18,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_18,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_19,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_19,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_2,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_2,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_20,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_20,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_21,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_21,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_22,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_22,NEXUS_5,1.0,en]",0,], @@ -705,72 +695,72 @@ export const screenshots = [ ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_26,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_26,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_27,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_27,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_28,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_28,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_29,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_29,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_29,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_3,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_30,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_31,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_30,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_30,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_31,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_31,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_4,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_4,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_5,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_5,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_6,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_7,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_8,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-7_8_null_9,NEXUS_5,1.0,en]","ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-7_9_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_0,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_1,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[appnav.root_RootView_null_RootView-Day-3_3_null_2,NEXUS_5,1.0,en]","ui_S_t[appnav.root_RootView_null_RootView-Night-3_4_null_2,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.atomic.atoms_RoundedIconAtom_null_RoundedIconAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_RoundedIconAtom_null_RoundedIconAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Night-1_3_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl.emoji_SasEmojis_null_SasEmojis-Night-1_3_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Day-7_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.searchaccountprovider_SearchAccountProviderView_null_SearchAccountProviderView-Night-7_9_null_1,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveNoneQuery_null_Searchviews_SearchBarActiveNoneQuery_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithContent_null_Searchviews_SearchBarActiveWithContent_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithNoResults_null_Searchviews_SearchBarActiveWithNoResults_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithNoResults_null_Searchviews_SearchBarActiveWithNoResults_0_null,NEXUS_5,1.0,en]","",19846,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithQueryNoBackButton_null_Searchviews_SearchBarActiveWithQueryNoBackButton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarActiveWithQuery_null_Searchviews_SearchBarActiveWithQuery_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SearchBarInactive_null_Searchviews_SearchBarInactive_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.createroom.impl.components_SearchMultipleUsersResultItem_null_SearchMultipleUsersResultItem_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.createroom.impl.components_SearchSingleUserResultItem_null_SearchSingleUserResultItem_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_8,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.components_SearchMultipleUsersResultItem_null_SearchMultipleUsersResultItem_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.createroom.impl.components_SearchSingleUserResultItem_null_SearchSingleUserResultItem_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.disable_SecureBackupDisableView_null_SecureBackupDisableView-Night-1_3_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enable_SecureBackupEnableView_null_SecureBackupEnableView-Night-2_4_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_null_SecureBackupEnterRecoveryKeyView-Night-3_5_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_5,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_6,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_7,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Day-4_5_null_8,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.root_SecureBackupRootView_null_SecureBackupRootView-Night-4_6_null_8,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Day-6_7_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupViewChange_null_SecureBackupSetupViewChange-Night-6_8_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_0,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_1,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_2,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_3,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Day-5_6_null_4,NEXUS_5,1.0,en]","ui_S_t[f.securebackup.impl.setup_SecureBackupSetupView_null_SecureBackupSetupView-Night-5_7_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_0,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null_1,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Day-9_10_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_SelectedUsersRowList_null_SelectedUsersRowList-Night-9_11_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_SendButton_null_SendButton-Day-12_13_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_SendButton_null_SendButton-Night-12_14_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.send_SendLocationView_null_SendLocationView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_2,NEXUS_5,1.0,en]",0,], @@ -780,33 +770,33 @@ export const screenshots = [ ["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_6,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_7,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Day-8_8_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.sender_SenderName_null_SenderName-Night-8_9_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.biometric_SetupBiometricView_null_SetupBiometricView-Night-2_4_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_0,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_1,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_2,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_3,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Day-3_4_null_4,NEXUS_5,1.0,en]","ui_S_t[f.lockscreen.impl.setup.pin_SetupPinView_null_SetupPinView-Night-3_5_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_10,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_8,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_9,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-55_55_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-55_56_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_10,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_8,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Day-1_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.actionlist_SheetContent_null_SheetContent-Night-1_2_null_9,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Day-56_56_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.reactionsummary_SheetContent_null_SheetContent-Night-56_57_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_2,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_3,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_4,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_5,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_6,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Day-1_2_null_7,NEXUS_5,1.0,en]","ui_S_t[f.location.impl.show_ShowLocationView_null_ShowLocationView-Night-1_3_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.signedout.impl_SignedOutView_null_SignedOutView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialogContent_null_Dialogs_SingleSelectionDialogContent_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.list_SingleSelectionListItemCustomFormattert_null_Listitems_SingleselectionListitem-customformatter_0_null,NEXUS_5,1.0,en]","",0,], @@ -815,7 +805,7 @@ export const screenshots = [ ["ui_S_t[l.designsystem.components.list_SingleSelectionListItemUnselectedWithSupportingText_null_Listitems_SingleselectionListitem-noselection,supportingtext_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.components.list_SingleSelectionListItem_null_Listitems_SingleselectionListitem-noselection_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_Sliders_null_Sliders_Sliders_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Night-2_4_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.dialogs_SlidingSyncNotSupportedDialog_null_SlidingSyncNotSupportedDialog-Night-2_4_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionAndCloseButton_null_Snackbars_Snackbarwithactionandclosebutton_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionOnNewLineAndCloseButton_null_Snackbars_Snackbarwithactionandclosebuttononnewline_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_SnackbarWithActionOnNewLine_null_Snackbars_Snackbarwithactiononnewline_0_null,NEXUS_5,1.0,en]","",0,], @@ -825,23 +815,23 @@ export const screenshots = [ ["ui_S_t[l.designsystem.modifiers_SquareSizeModifierLargeHeight_null_SquareSizeModifierLargeHeight_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.modifiers_SquareSizeModifierLargeWidth_null_SquareSizeModifierLargeWidth_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_0,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_1,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Day-1_2_null_1,NEXUS_5,1.0,en]","ui_S_t[f.location.api.internal_StaticMapPlaceholder_null_StaticMapPlaceholder-Night-1_3_null_1,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.location.api_StaticMapView_null_StaticMapView-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[f.location.api_StaticMapView_null_StaticMapView-Night-0_2_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.pages_SunsetPage_null_SunsetPage-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.pages_SunsetPage_null_SunsetPage-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.button_SuperButton_null_SuperButton-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.button_SuperButton_null_SuperButton-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_Surface_null_Surface_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_Switch_null_Toggles_Switch_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Day-1_1_null,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Night-1_2_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Day-1_1_null,NEXUS_5,1.0,en]","ui_S_t[appnav.loggedin_SyncStateView_null_SyncStateView-Night-1_2_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.theme.components_TextButtonLarge_null_Buttons_TextButtonLarge_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_TextButtonMedium_null_Buttons_TextButtonMedium_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_TextButtonSmall_null_Buttons_TextButtonSmall_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Night-2_4_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Night-1_3_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Night-6_8_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Night-5_7_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Night-7_9_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Night-0_2_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Day-2_3_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerEdit_null_TextComposerEdit-Night-2_4_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerFormatting_null_TextComposerFormatting-Night-1_3_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Day-6_7_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_null_TextComposerLinkDialogCreateLinkWithoutText-Night-6_8_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Day-5_6_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogCreateLink_null_TextComposerLinkDialogCreateLink-Night-5_7_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Day-7_8_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerLinkDialogEditLink_null_TextComposerLinkDialogEditLink-Night-7_9_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Day-3_4_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerReply_null_TextComposerReply-Night-3_5_null,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Day-0_1_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerSimple_null_TextComposerSimple-Night-0_2_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.textcomposer_TextComposerVoice_null_TextComposerVoice-Day-4_5_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer_TextComposerVoice_null_TextComposerVoice-Night-4_6_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TextDark_null_Text_TextDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.designsystem.theme.components_TextFieldDark_null_TextFields_TextFieldDark_0_null,NEXUS_5,1.0,en]","",0,], @@ -853,175 +843,186 @@ export const screenshots = [ ["ui_S_t[l.designsystem.theme.components_TextFieldValueTextFieldDark_null_TextFields_TextFieldValueTextFieldDark_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[l.textcomposer.components_TextFormatting_null_TextFormatting-Day-13_14_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_TextFormatting_null_TextFormatting-Night-13_15_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TextLight_null_Text_TextLight_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerHorizontal_null_DateTimepickers_TimePickerHorizontal_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalDark_null_DateTimepickers_TimePickerVerticalDark_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalLight_null_DateTimepickers_TimePickerVerticalLight_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerHorizontal_null_DateTimepickers_TimePickerHorizontal_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalDark_null_DateTimepickers_TimePickerVerticalDark_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[l.designsystem.theme.components.previews_TimePickerVerticalLight_null_DateTimepickers_TimePickerVerticalLight_0_null,NEXUS_5,1.0,en]","",19846,], ["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_2,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_3,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-39_39_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-39_40_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-35_35_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-35_36_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-60_60_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-60_61_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-36_36_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-36_37_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Day-16_16_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineEventTimestampView_null_TimelineEventTimestampView-Night-16_17_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Day-40_40_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_null_TimelineImageWithCaptionRow-Night-40_41_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Day-36_36_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemAudioView_null_TimelineItemAudioView-Night-36_37_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-61_61_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-61_62_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Day-61_61_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_null_TimelineItemDaySeparatorView-Night-61_62_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Day-37_37_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemEncryptedView_null_TimelineItemEncryptedView-Night-37_38_null_2,NEXUS_5,1.0,en]",19849,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Day-18_18_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_null_TimelineItemEventRowDisambiguated-Night-18_19_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Day-19_19_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_null_TimelineItemEventRowForDirectRoom-Night-19_20_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_null_TimelineItemEventRowLongSenderName_0_null,NEXUS_5,1.0,en]","",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_2,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_3,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-21_22_null,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Day-20_20_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowTimestamp_null_TimelineItemEventRowTimestamp-Night-20_21_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Day-21_21_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_null_TimelineItemEventRowWithManyReactions-Night-21_22_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Day-22_22_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithRR_null_TimelineItemEventRowWithRR-Night-22_23_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_11,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_4,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_8,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-24_24_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-24_25_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Day-23_23_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_null_TimelineItemEventRowWithReplyInformative-Night-23_24_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Day-24_24_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_null_TimelineItemEventRowWithReplyOther-Night-24_25_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_11,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_8,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Day-25_25_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRowWithReply_null_TimelineItemEventRowWithReply-Night-25_26_null_9,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Day-17_17_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemEventRow_null_TimelineItemEventRow-Night-17_18_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventTimestampBelow_null_TimelineItemEventTimestampBelow_0_null,NEXUS_5,1.0,en]","",19839,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-37_37_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-37_38_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-26_26_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-26_27_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-25_25_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-25_26_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-38_38_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-38_39_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-40_40_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-40_41_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-41_41_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-41_42_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-42_42_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-42_43_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_2,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-43_43_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-43_44_null_3,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-27_27_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-27_28_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-29_29_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-29_30_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-30_30_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-30_31_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-31_31_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-31_32_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-28_28_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-28_29_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-61_61_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-61_62_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-56_56_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-56_57_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-44_44_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-44_45_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-62_62_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-62_63_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-32_32_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-32_33_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-45_45_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-45_46_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-46_46_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-46_47_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-47_47_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-47_48_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-48_48_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-48_49_null,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-49_49_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-49_50_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-52_52_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-52_53_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_1,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_11,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_12,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_13,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_14,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_4,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-51_51_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-51_52_null_9,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-63_63_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-63_64_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-50_50_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-50_51_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemEventTimestampBelow_null_TimelineItemEventTimestampBelow_0_null,NEXUS_5,1.0,en]","",19846,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Day-38_38_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemFileView_null_TimelineItemFileView-Night-38_39_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Day-27_27_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_null_TimelineItemGroupedEventsRowContentCollapse-Night-27_28_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Day-26_26_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_null_TimelineItemGroupedEventsRowContentExpanded-Night-26_27_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Day-39_39_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemImageView_null_TimelineItemImageView-Night-39_40_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Day-41_41_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemInformativeView_null_TimelineItemInformativeView-Night-41_42_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Day-42_42_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_null_TimelineItemLegacyCallInviteView-Night-42_43_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-43_43_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-43_44_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Day-43_43_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemLocationView_null_TimelineItemLocationView-Night-43_44_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Day-44_44_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemPollView_null_TimelineItemPollView-Night-44_45_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Day-28_28_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsLayout_null_TimelineItemReactionsLayout-Night-28_29_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Day-30_30_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewFew_null_TimelineItemReactionsViewFew-Night-30_31_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Day-31_31_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_null_TimelineItemReactionsViewIncoming-Night-31_32_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Day-32_32_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_null_TimelineItemReactionsViewOutgoing-Night-32_33_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Day-29_29_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemReactionsView_null_TimelineItemReactionsView-Night-29_30_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Day-62_62_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_null_TimelineItemReadMarkerView-Night-62_63_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Day-57_57_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_null_TimelineItemReadReceiptView-Night-57_58_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Day-45_45_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemRedactedView_null_TimelineItemRedactedView-Night-45_46_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Day-63_63_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_null_TimelineItemRoomBeginningView-Night-63_64_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Day-33_33_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components_TimelineItemStateEventRow_null_TimelineItemStateEventRow-Night-33_34_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Day-46_46_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStateView_null_TimelineItemStateView-Night-46_47_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Day-47_47_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemStickerView_null_TimelineItemStickerView-Night-47_48_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Day-48_48_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemTextView_null_TimelineItemTextView-Night-48_49_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Day-49_49_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemUnknownView_null_TimelineItemUnknownView-Night-49_50_null,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Day-50_50_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVideoView_null_TimelineItemVideoView-Night-50_51_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Day-53_53_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceViewUnified_null_TimelineItemVoiceViewUnified-Night-53_54_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_1,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_10,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_11,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_12,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_13,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_14,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_2,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_3,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_4,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_5,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_6,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Day-52_52_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineItemVoiceView_null_TimelineItemVoiceView-Night-52_53_null_9,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Day-64_64_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_null_TimelineLoadingMoreIndicator-Night-64_65_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Day-51_51_null,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_null_TimelineVideoWithCaptionRow-Night-51_52_null,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_1,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_10,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_10,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_11,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_11,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_12,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_12,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_13,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_13,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_14,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_14,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_15,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_15,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_16,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_16,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_2,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_3,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_5,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_6,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en]",19842,], +["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_8,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Day-9_9_null_9,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.timeline_TimelineView_null_TimelineView-Night-9_10_null_9,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.theme.components_TopAppBar_null_AppBars_TopAppBar_0_null,NEXUS_5,1.0,en]","",0,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_0,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_1,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_2,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_3,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_4,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_5,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_6,NEXUS_5,1.0,en]",19842,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_7,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-66_66_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-66_67_null_8,NEXUS_5,1.0,en]",0,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[l.troubleshoot.impl_TroubleshootNotificationsView_null_TroubleshootNotificationsView-Night-0_2_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_0,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_0,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_1,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_2,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_3,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_4,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_5,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_6,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_6,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_7,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_7,NEXUS_5,1.0,en]",0,], +["ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Day-68_68_null_8,NEXUS_5,1.0,en]","ui_S_t[f.messages.impl.typing_TypingNotificationView_null_TypingNotificationView-Night-68_69_null_8,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.atomic.atoms_UnreadIndicatorAtom_null_UnreadIndicatorAtom-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.atomic.atoms_UnreadIndicatorAtom_null_UnreadIndicatorAtom-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[l.matrix.ui.components_UnresolvedUserRow_null_UnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19839,], +["ui_S_t[l.matrix.ui.components_UnresolvedUserRow_null_UnresolvedUserRow_0_null,NEXUS_5,1.0,en]","",19846,], ["ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en]","ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.avatar_UserAvatarColors_null_UserAvatarColors-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_8_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_9_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,en]","ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_8_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_0,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_1,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_2,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_2,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_3,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_3,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_4,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_4,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_5,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_5,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_6,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_6,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_7,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_7,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_8,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_8,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_9,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_9,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Day-2_3_null_9,NEXUS_5,1.0,en]","ui_S_t[f.createroom.impl.components_UserListView_null_UserListView-Night-2_4_null_9,NEXUS_5,1.0,en]",19846,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_0,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_1,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_1,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Day-9_10_null_2,NEXUS_5,1.0,en]","ui_S_t[f.preferences.impl.user_UserPreferences_null_UserPreferences-Night-9_11_null_2,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_4,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_5,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_6,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_7,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_9,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en]",19849,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_2,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_3,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_4,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_4,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_5,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_5,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_6,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_6,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_7,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_7,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_8,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_8,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Day-0_1_null_9,NEXUS_5,1.0,en]","ui_S_t[f.verifysession.impl_VerifySelfSessionView_null_VerifySelfSessionView-Night-0_2_null_9,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.ruler_VerticalRuler_null_VerticalRuler-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_VerticalRuler_null_VerticalRuler-Night_1_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Day-0_1_null_0,NEXUS_5,1.0,en]","ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Night-0_2_null_0,NEXUS_5,1.0,en]",0,], ["ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Day-0_1_null_1,NEXUS_5,1.0,en]","ui_S_t[f.viewfolder.impl.file_ViewFileView_null_ViewFileView-Night-0_2_null_1,NEXUS_5,1.0,en]",0,], @@ -1035,12 +1036,12 @@ export const screenshots = [ ["ui_S_t[l.textcomposer.components_VoiceMessagePreview_null_VoiceMessagePreview-Day-15_16_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessagePreview_null_VoiceMessagePreview-Night-15_17_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_VoiceMessageRecorderButton_null_VoiceMessageRecorderButton-Day-16_17_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessageRecorderButton_null_VoiceMessageRecorderButton-Night-16_18_null,NEXUS_5,1.0,en]",0,], ["ui_S_t[l.textcomposer.components_VoiceMessageRecording_null_VoiceMessageRecording-Day-17_18_null,NEXUS_5,1.0,en]","ui_S_t[l.textcomposer.components_VoiceMessageRecording_null_VoiceMessageRecording-Night-17_19_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_0,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_1,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_2,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_3,NEXUS_5,1.0,en]",19839,], -["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_4,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_0,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_0,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_1,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_1,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_2,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_2,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_3,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_3,NEXUS_5,1.0,en]",19846,], +["ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Day-8_9_null_4,NEXUS_5,1.0,en]","ui_S_t[f.login.impl.screens.waitlistscreen_WaitListView_null_WaitListView-Night-8_10_null_4,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.components.media_WaveformPlaybackView_null_WaveformPlaybackView-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.components.media_WaveformPlaybackView_null_WaveformPlaybackView-Night_1_null,NEXUS_5,1.0,en]",0,], -["ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Night-1_3_null,NEXUS_5,1.0,en]",19839,], +["ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Day-1_2_null,NEXUS_5,1.0,en]","ui_S_t[f.ftue.impl.welcome_WelcomeView_null_WelcomeView-Night-1_3_null,NEXUS_5,1.0,en]",19846,], ["ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Day_0_null,NEXUS_5,1.0,en]","ui_S_t[l.designsystem.ruler_WithRulers_null_WithRulers-Night_1_null,NEXUS_5,1.0,en]",0,], ]; diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png index fc8e76dc89..25aefa7e93 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01404e25f56b60dcc84b0bbdd6711f0e7ed6b58078743bf7e919d6766842c92f -size 81164 +oid sha256:3a39e808e60fb455464cd86b7ea5644591544395c31481c715ce2ecefde209f9 +size 60912 From 86838e7277d7a094496b9d231f06aad99f1e445e Mon Sep 17 00:00:00 2001 From: Tonkku Date: Mon, 6 May 2024 10:10:49 +0300 Subject: [PATCH 258/289] Enable support for Android per-app language preferences (#2795) * Enable support for Android per-app language preferences * Add changelog entry --- app/build.gradle.kts | 4 ++++ app/src/main/res/resources.properties | 17 +++++++++++++++++ changelog.d/2795.feature | 1 + 3 files changed, 22 insertions(+) create mode 100644 app/src/main/res/resources.properties create mode 100644 changelog.d/2795.feature diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6ecfe66fb6..47dd5023e0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -165,6 +165,10 @@ android { buildConfigField("String", "FLAVOR_DESCRIPTION", "\"FDroid\"") } } + + androidResources { + generateLocaleConfig = true + } } androidComponents { diff --git a/app/src/main/res/resources.properties b/app/src/main/res/resources.properties new file mode 100644 index 0000000000..c0585fd6d7 --- /dev/null +++ b/app/src/main/res/resources.properties @@ -0,0 +1,17 @@ +# +# Copyright (c) 2024 New Vector Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +unqualifiedResLocale=en diff --git a/changelog.d/2795.feature b/changelog.d/2795.feature new file mode 100644 index 0000000000..4dec51f765 --- /dev/null +++ b/changelog.d/2795.feature @@ -0,0 +1 @@ +Enable support for Android per-app language preferences From d27e647b46a4774a63cdafcf125fef8380743b16 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Mon, 6 May 2024 07:32:14 +0000 Subject: [PATCH 259/289] Update screenshots --- ...ntLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png index 25aefa7e93..fc8e76dc89 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.atoms_ElementLogoAtomLargeNoBlurShadow_null_ElementLogoAtomLargeNoBlurShadow-Day_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a39e808e60fb455464cd86b7ea5644591544395c31481c715ce2ecefde209f9 -size 60912 +oid sha256:01404e25f56b60dcc84b0bbdd6711f0e7ed6b58078743bf7e919d6766842c92f +size 81164 From 6e7bbd6972de63976bc6113c4c4497824a474257 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 6 May 2024 11:12:09 +0200 Subject: [PATCH 260/289] Explicitly set domain for external link handling. And revert change: let ElementCallActivity handle again `call.element.io` links. --- app/src/main/AndroidManifest.xml | 4 ++- .../io/element/android/x/MainActivity.kt | 14 ----------- features/call/src/main/AndroidManifest.xml | 11 +++++--- .../features/call/ui/ElementCallActivity.kt | 25 ------------------- 4 files changed, 11 insertions(+), 43 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1089d631d9..eca2ffe957 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,7 +84,9 @@ - + + + + + + + + + + + diff --git a/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt b/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt index 1c9ece7fb9..8eea4c814f 100644 --- a/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt +++ b/features/call/src/main/kotlin/io/element/android/features/call/ui/ElementCallActivity.kt @@ -17,7 +17,6 @@ package io.element.android.features.call.ui import android.Manifest -import android.app.Activity import android.content.Context import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_NEW_TASK @@ -36,7 +35,6 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.core.app.ActivityOptionsCompat import androidx.core.content.IntentCompat import com.bumble.appyx.core.integrationpoint.NodeComponentActivity import io.element.android.compound.theme.ElementTheme @@ -49,7 +47,6 @@ import io.element.android.features.call.di.CallBindings import io.element.android.features.call.utils.CallIntentDataParser import io.element.android.features.preferences.api.store.AppPreferencesStore import io.element.android.libraries.architecture.bindings -import io.element.android.libraries.core.bool.orFalse import javax.inject.Inject class ElementCallActivity : NodeComponentActivity(), CallScreenNavigator { @@ -66,28 +63,6 @@ class ElementCallActivity : NodeComponentActivity(), CallScreenNavigator { } context.startActivity(intent) } - - /** - * Starts the [ElementCallActivity] if the intent contains a valid URL, - * and returns true if it's the case. - */ - fun maybeStart( - activity: Activity, - intent: Intent?, - ): Boolean { - return intent?.data - ?.takeIf { uri -> uri.scheme == "https" && uri.host == "call.element.io" } - ?.let { uri -> - val callIntent = Intent(activity, ElementCallActivity::class.java).apply { - data = uri - } - // Disable animation since MainActivity has already been animated. - val options = ActivityOptionsCompat.makeCustomAnimation(activity, 0, 0) - activity.startActivity(callIntent, options.toBundle()) - true - } - .orFalse() - } } @Inject lateinit var callIntentDataParser: CallIntentDataParser From ebfb41f6017b1b433960f0e0700ca469c6efee51 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 6 May 2024 11:14:24 +0200 Subject: [PATCH 261/289] Format file (no other change) --- features/call/src/main/AndroidManifest.xml | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/features/call/src/main/AndroidManifest.xml b/features/call/src/main/AndroidManifest.xml index c7db9cc38f..c16ab3aa19 100644 --- a/features/call/src/main/AndroidManifest.xml +++ b/features/call/src/main/AndroidManifest.xml @@ -16,8 +16,12 @@ - - + + @@ -28,14 +32,15 @@ + android:exported="true" + android:label="@string/element_call" + android:launchMode="singleTask" + android:taskAffinity="io.element.android.features.call"> + @@ -46,6 +51,7 @@ + @@ -55,6 +61,7 @@ + @@ -62,7 +69,10 @@ - + From 227611cfbadd4399fe75c4c2b7631dbf9755c1dd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 6 May 2024 11:34:23 +0200 Subject: [PATCH 262/289] Add links to the matching assetlinks.json files. --- app/src/main/AndroidManifest.xml | 3 +++ features/call/src/main/AndroidManifest.xml | 1 + 2 files changed, 4 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eca2ffe957..b42b2c72bc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,8 +84,11 @@ + + + From 19a97c62a89bdc6d3549dcad11c8295f2c2e6a7d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 6 May 2024 11:40:16 +0200 Subject: [PATCH 263/289] Add warning about *.element.io --- app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b42b2c72bc..807e48b555 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,7 @@ + From 6ff1af32765573d3759548c4f575fe407dd53fba Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 6 May 2024 14:47:44 +0200 Subject: [PATCH 264/289] Add Explicit list of supported languages, generated from Localazy data. --- .github/workflows/sync-localazy.yml | 1 + app/build.gradle.kts | 9 +-- app/src/main/AndroidManifest.xml | 1 + app/src/main/res/xml/locales_config.xml | 19 +++++ plugins/src/main/kotlin/extension/locales.kt | 22 ++++++ .../importSupportedLocalesFromLocalazy.py | 71 +++++++++++++++++++ 6 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/xml/locales_config.xml create mode 100644 plugins/src/main/kotlin/extension/locales.kt create mode 100755 tools/localazy/importSupportedLocalesFromLocalazy.py diff --git a/.github/workflows/sync-localazy.yml b/.github/workflows/sync-localazy.yml index 50ebc12c95..3b13fa6a77 100644 --- a/.github/workflows/sync-localazy.yml +++ b/.github/workflows/sync-localazy.yml @@ -33,6 +33,7 @@ jobs: - name: Run Localazy script run: | ./tools/localazy/downloadStrings.sh --all + ./tools/localazy/importSupportedLocalesFromLocalazy.py ./tools/test/generateAllScreenshots.py - name: Create Pull Request for Strings uses: peter-evans/create-pull-request@v6 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 47dd5023e0..4c21cef589 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -23,6 +23,7 @@ import extension.allServicesImpl import extension.gitBranchName import extension.gitRevision import extension.koverDependencies +import extension.locales import extension.setupKover plugins { @@ -74,6 +75,10 @@ android { isUniversalApk = true } } + + defaultConfig { + resourceConfigurations += locales + } } signingConfigs { @@ -165,10 +170,6 @@ android { buildConfigField("String", "FLAVOR_DESCRIPTION", "\"FDroid\"") } } - - androidResources { - generateLocaleConfig = true - } } androidComponents { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1089d631d9..4bb171e3e6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,6 +29,7 @@ android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:localeConfig="@xml/locales_config" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml new file mode 100644 index 0000000000..17e0192414 --- /dev/null +++ b/app/src/main/res/xml/locales_config.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/plugins/src/main/kotlin/extension/locales.kt b/plugins/src/main/kotlin/extension/locales.kt new file mode 100644 index 0000000000..c384501a1b --- /dev/null +++ b/plugins/src/main/kotlin/extension/locales.kt @@ -0,0 +1,22 @@ +// File generated by importSupportedLocalesFromLocalazy.py, do not edit + +package extension + +val locales = setOf( + "be", + "bg", + "cs", + "de", + "en", + "es", + "fr", + "hu", + "in", + "it", + "ro", + "ru", + "sk", + "sv", + "uk", + "zh-rTW", +) diff --git a/tools/localazy/importSupportedLocalesFromLocalazy.py b/tools/localazy/importSupportedLocalesFromLocalazy.py new file mode 100755 index 0000000000..15f0aed560 --- /dev/null +++ b/tools/localazy/importSupportedLocalesFromLocalazy.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 + +import os +import subprocess + + +def getLocalesFromLocalazy(): + command = subprocess.run( + ["localazy languages --read-key a7876306080832595063-aa37154bb3772f6146890fca868d155b2228b492c56c91f67abdcdfb74d6142d --csv"], + shell=True, + capture_output=True, + text=True, + ) + data = command.stdout + result = [] + for line in data.split("\n"): + if line: + line = line.split(",") + if (line[6] == "true"): + result.append(line[0]) + return sorted(result) + + +def normalizeForResourceConfigurations(locale): + match locale: + case "id": + return "in" + case "zh_TW#Hant": + return "zh-rTW" + case _: + return locale + + +def normalizeForLocalConfig(locale): + match locale: + case "id": + return "in" + case "zh_TW#Hant": + return "zh-TW" + case _: + return locale + + +def generateLocaleFile(locales, file): + with open("plugins/src/main/kotlin/extension/locales.kt", "w") as f: + f.write("// File generated by " + file + ", do not edit\n\n") + f.write("package extension\n\n") + f.write("val locales = setOf(\n") + for locale in locales: + f.write(" \"" + normalizeForResourceConfigurations(locale) + "\",\n") + f.write(")\n") + + +def generateLocalesConfigFile(locales, file): + with open("app/src/main/res/xml/locales_config.xml", "w") as f: + f.write("\n") + f.write('\n') + for locale in locales: + f.write(" \n") + f.write("\n") + + +def main(): + file = os.path.basename(__file__) + locales = getLocalesFromLocalazy() + generateLocaleFile(locales, file) + generateLocalesConfigFile(locales, file) + + +if __name__ == "__main__": + main() From e82e3330b22b3a8081596418c42d1d47a6341988 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Mon, 6 May 2024 17:20:03 +0200 Subject: [PATCH 265/289] UX cleanup: reorder options in the main settings screen (#2802) * UX cleanup: reorder options in the main settings screen * Update screenshots * Group sections in composables * Add some horizontal padding to the `Footer` component --------- Co-authored-by: ElementBot --- changelog.d/2801.misc | 1 + .../impl/root/PreferencesRootView.kt | 219 +++++++++++------- ...otViewDark--1_1_null_0,NEXUS_5,1.0,en].png | 4 +- ...otViewDark--1_1_null_1,NEXUS_5,1.0,en].png | 4 +- ...tViewLight--0_0_null_0,NEXUS_5,1.0,en].png | 4 +- ...tViewLight--0_0_null_1,NEXUS_5,1.0,en].png | 4 +- 6 files changed, 149 insertions(+), 87 deletions(-) create mode 100644 changelog.d/2801.misc diff --git a/changelog.d/2801.misc b/changelog.d/2801.misc new file mode 100644 index 0000000000..571d0296e0 --- /dev/null +++ b/changelog.d/2801.misc @@ -0,0 +1 @@ +UX cleanup: reorder options in the main settings screen. diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt index 21132df5c9..a70f73fa6e 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt @@ -17,6 +17,7 @@ package io.element.android.features.preferences.impl.root import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable @@ -81,87 +82,33 @@ fun PreferencesRootView( }, user = state.myUser, ) - if (state.showSecureBackup) { - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.common_chat_backup)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.KeySolid())), - trailingContent = ListItemContent.Badge.takeIf { state.showSecureBackupBadge }, - onClick = onSecureBackupClicked, - ) - HorizontalDivider() - } - if (state.accountManagementUrl != null) { - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.action_manage_account)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.UserProfile())), - trailingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.PopOut())), - onClick = { onManageAccountClicked(state.accountManagementUrl) }, - ) - HorizontalDivider() - } - if (state.showAnalyticsSettings) { - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.common_analytics)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Chart())), - onClick = onOpenAnalytics, - ) - } - if (state.showNotificationSettings) { - ListItem( - headlineContent = { Text(stringResource(id = R.string.screen_notification_settings_title)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Notifications())), - onClick = onOpenNotificationSettings, - ) - } - if (state.showBlockedUsersItem) { - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.common_blocked_users)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Block())), - onClick = onOpenBlockedUsers, - ) - } - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.common_report_a_problem)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.ChatProblem())), - onClick = onOpenRageShake + + // 'Manage my app' section + ManageAppSection( + state = state, + onOpenNotificationSettings = onOpenNotificationSettings, + onOpenLockScreenSettings = onOpenLockScreenSettings, + onSecureBackupClicked = onSecureBackupClicked, ) - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.common_about)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Info())), - onClick = onOpenAbout, + + // 'Account' section + ManageAccountSection( + state = state, + onManageAccountClicked = onManageAccountClicked, + onOpenBlockedUsers = onOpenBlockedUsers ) - if (state.showLockScreenSettings) { - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.common_screen_lock)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Lock())), - onClick = onOpenLockScreenSettings, - ) - } - HorizontalDivider() - if (state.devicesManagementUrl != null) { - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.action_manage_devices)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Devices())), - trailingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.PopOut())), - onClick = { onManageAccountClicked(state.devicesManagementUrl) }, - ) - HorizontalDivider() - } - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.common_advanced_settings)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Settings())), - onClick = onOpenAdvancedSettings, - ) - if (state.showDeveloperSettings) { - DeveloperPreferencesView(onOpenDeveloperSettings) - } - HorizontalDivider() - ListItem( - headlineContent = { Text(stringResource(id = CommonStrings.action_signout)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.SignOut())), - style = ListItemStyle.Destructive, - onClick = onSignOutClicked, + + // General section + GeneralSection( + state = state, + onOpenAbout = onOpenAbout, + onOpenAnalytics = onOpenAnalytics, + onOpenRageShake = onOpenRageShake, + onOpenAdvancedSettings = onOpenAdvancedSettings, + onOpenDeveloperSettings = onOpenDeveloperSettings, + onSignOutClicked = onSignOutClicked, ) + Footer( version = state.version, deviceId = state.deviceId, @@ -169,6 +116,120 @@ fun PreferencesRootView( } } +@Composable +private fun ColumnScope.ManageAppSection( + state: PreferencesRootState, + onOpenNotificationSettings: () -> Unit, + onOpenLockScreenSettings: () -> Unit, + onSecureBackupClicked: () -> Unit, +) { + if (state.showNotificationSettings) { + ListItem( + headlineContent = { Text(stringResource(id = R.string.screen_notification_settings_title)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Notifications())), + onClick = onOpenNotificationSettings, + ) + } + if (state.showLockScreenSettings) { + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.common_screen_lock)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Lock())), + onClick = onOpenLockScreenSettings, + ) + } + if (state.showSecureBackup) { + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.common_chat_backup)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.KeySolid())), + trailingContent = ListItemContent.Badge.takeIf { state.showSecureBackupBadge }, + onClick = onSecureBackupClicked, + ) + } + if (state.showNotificationSettings || state.showLockScreenSettings || state.showSecureBackup) { + HorizontalDivider() + } +} + +@Composable +private fun ColumnScope.ManageAccountSection( + state: PreferencesRootState, + onManageAccountClicked: (url: String) -> Unit, + onOpenBlockedUsers: () -> Unit, +) { + state.accountManagementUrl?.let { url -> + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.action_manage_account)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.UserProfile())), + trailingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.PopOut())), + onClick = { onManageAccountClicked(url) }, + ) + } + + state.devicesManagementUrl?.let { url -> + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.action_manage_devices)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Devices())), + trailingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.PopOut())), + onClick = { onManageAccountClicked(url) }, + ) + } + + if (state.showBlockedUsersItem) { + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.common_blocked_users)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Block())), + onClick = onOpenBlockedUsers, + ) + } + + if (state.accountManagementUrl != null || state.devicesManagementUrl != null || state.showBlockedUsersItem) { + HorizontalDivider() + } +} + +@Composable +private fun ColumnScope.GeneralSection( + state: PreferencesRootState, + onOpenAbout: () -> Unit, + onOpenAnalytics: () -> Unit, + onOpenRageShake: () -> Unit, + onOpenAdvancedSettings: () -> Unit, + onOpenDeveloperSettings: () -> Unit, + onSignOutClicked: () -> Unit, +) { + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.common_about)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Info())), + onClick = onOpenAbout, + ) + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.common_report_a_problem)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.ChatProblem())), + onClick = onOpenRageShake + ) + if (state.showAnalyticsSettings) { + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.common_analytics)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Chart())), + onClick = onOpenAnalytics, + ) + } + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.common_advanced_settings)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Settings())), + onClick = onOpenAdvancedSettings, + ) + if (state.showDeveloperSettings) { + DeveloperPreferencesView(onOpenDeveloperSettings) + } + ListItem( + headlineContent = { Text(stringResource(id = CommonStrings.action_signout)) }, + leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.SignOut())), + style = ListItemStyle.Destructive, + onClick = onSignOutClicked, + ) +} + @Composable private fun Footer( version: String, @@ -186,7 +247,7 @@ private fun Footer( Text( modifier = Modifier .fillMaxWidth() - .padding(top = 40.dp, bottom = 24.dp), + .padding(start = 16.dp, end = 16.dp, top = 40.dp, bottom = 24.dp), textAlign = TextAlign.Center, text = text, style = ElementTheme.typography.fontBodySmRegular, diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en].png index c54c15e9ca..4973ac1c53 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75fb611e02345fe1cf7947d1e160e309cf8520f0256ebd25b43bab8c3102f3f8 -size 37138 +oid sha256:9e1156c479fdd3ebb2487373103183ae6a21ba618da2c58dc26f19fc02bbad2b +size 37171 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en].png index 90e78c16a5..f2c55ee046 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewDark_null_PreferencesRootViewDark--1_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7be4df5a4e391d2253f283acf0fb9362b965fa887235221b794915d74891899 -size 36783 +oid sha256:752003ec1c673d18f445d47e5acbafd4b435371832baa5ebd220e5ee1c62fa07 +size 36805 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en].png index 4f2683cf78..d0d405e630 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67503a61f560ef79d7e981057094dccf46eda167ee84427c1aceb9f83edf0146 -size 39080 +oid sha256:a278e774320a876d6c65a2178de2b73cb0da20df18cad293b6969a81cb16d6d5 +size 39076 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en].png index 12e2374878..14aed1cb7c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.preferences.impl.root_PreferencesRootViewLight_null_PreferencesRootViewLight--0_0_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cb3be70de8e3878bdd90db9945aed60fb2b38d8c66ea610806226c21b1f5a5a -size 39052 +oid sha256:72d4f6e89026ffc7155828c38b7e013a703497725ba3c6b667c7eb97015750fb +size 39050 From 740571baf35092ddd2aad058ae0ba096d50b6fc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 17:25:28 +0200 Subject: [PATCH 266/289] Update danger/danger-js action to v12.2.0 (#2804) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/danger.yml | 2 +- .github/workflows/quality.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml index 21787629fd..295c203107 100644 --- a/.github/workflows/danger.yml +++ b/.github/workflows/danger.yml @@ -11,7 +11,7 @@ jobs: - run: | npm install --save-dev @babel/plugin-transform-flow-strip-types - name: Danger - uses: danger/danger-js@12.1.0 + uses: danger/danger-js@12.2.0 with: args: "--dangerfile ./tools/danger/dangerfile.js" env: diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 0a439cecee..03650dd120 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -72,7 +72,7 @@ jobs: yarn add danger-plugin-lint-report --dev - name: Danger lint if: always() - uses: danger/danger-js@12.1.0 + uses: danger/danger-js@12.2.0 with: args: "--dangerfile ./tools/danger/dangerfile-lint.js" env: From 1817de121a7c744e18279edc8f6b219afb36ce09 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 15:26:58 +0000 Subject: [PATCH 267/289] Update firebaseAppDistribution to v5 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index db8cfe6b6a..cd82f6dcec 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ android_gradle_plugin = "8.3.2" kotlin = "1.9.23" ksp = "1.9.23-1.0.20" -firebaseAppDistribution = "4.2.0" +firebaseAppDistribution = "5.0.0" # AndroidX core = "1.13.0" From a761215e314e704e6d0a0c28c5f6e1f377f2c9ca Mon Sep 17 00:00:00 2001 From: Valere Date: Mon, 6 May 2024 19:06:54 +0200 Subject: [PATCH 268/289] Add support for Verification state analytics --- appnav/build.gradle.kts | 1 + .../loggedin/AnalyticsVerificationStateExt.kt | 59 +++++++++ .../appnav/loggedin/LoggedInPresenter.kt | 33 +++++ .../appnav/loggedin/LoggedInPresenterTest.kt | 4 + gradle/libs.versions.toml | 2 +- .../posthog/build.gradle.kts | 6 + .../posthog/PosthogAnalyticsProvider.kt | 33 +++-- .../posthog/PosthogAnalyticsProviderTest.kt | 116 ++++++++++++++++++ 8 files changed, 245 insertions(+), 9 deletions(-) create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/loggedin/AnalyticsVerificationStateExt.kt create mode 100644 services/analyticsproviders/posthog/src/test/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProviderTest.kt diff --git a/appnav/build.gradle.kts b/appnav/build.gradle.kts index ab215f8394..c24e544240 100644 --- a/appnav/build.gradle.kts +++ b/appnav/build.gradle.kts @@ -72,6 +72,7 @@ dependencies { testImplementation(projects.features.rageshake.test) testImplementation(projects.features.rageshake.impl) testImplementation(projects.services.appnavstate.test) + testImplementation(projects.services.analytics.test) testImplementation(libs.test.appyx.junit) testImplementation(libs.test.arch.core) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/AnalyticsVerificationStateExt.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/AnalyticsVerificationStateExt.kt new file mode 100644 index 0000000000..2afa0e40f2 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/AnalyticsVerificationStateExt.kt @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.loggedin + +import im.vector.app.features.analytics.plan.CryptoSessionStateChange +import im.vector.app.features.analytics.plan.UserProperties +import io.element.android.libraries.matrix.api.encryption.RecoveryState +import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus + +fun SessionVerifiedStatus.toAnalyticsUserPropertyValue(): UserProperties.VerificationState? { + return when (this) { + // we don't need to report transient states + SessionVerifiedStatus.Unknown -> null + SessionVerifiedStatus.NotVerified -> UserProperties.VerificationState.NotVerified + SessionVerifiedStatus.Verified -> UserProperties.VerificationState.Verified + } +} + +fun RecoveryState.toAnalyticsUserPropertyValue(): UserProperties.RecoveryState? { + return when (this) { + RecoveryState.ENABLED -> UserProperties.RecoveryState.Enabled + RecoveryState.DISABLED -> UserProperties.RecoveryState.Disabled + RecoveryState.INCOMPLETE -> UserProperties.RecoveryState.Incomplete + // we don't need to report transient states + else -> null + } +} +fun SessionVerifiedStatus.toAnalyticsStateChangeValue(): CryptoSessionStateChange.VerificationState? { + return when (this) { + // we don't need to report transient states + SessionVerifiedStatus.Unknown -> null + SessionVerifiedStatus.NotVerified -> CryptoSessionStateChange.VerificationState.NotVerified + SessionVerifiedStatus.Verified -> CryptoSessionStateChange.VerificationState.Verified + } +} + +fun RecoveryState.toAnalyticsStateChangeValue(): CryptoSessionStateChange.RecoveryState? { + return when (this) { + RecoveryState.ENABLED -> CryptoSessionStateChange.RecoveryState.Enabled + RecoveryState.DISABLED -> CryptoSessionStateChange.RecoveryState.Disabled + RecoveryState.INCOMPLETE -> CryptoSessionStateChange.RecoveryState.Incomplete + // we don't need to report transient states + else -> null + } +} diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt index 7cb1d634b8..0feaf47029 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt @@ -22,14 +22,19 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember +import im.vector.app.features.analytics.plan.CryptoSessionStateChange +import im.vector.app.features.analytics.plan.UserProperties import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.encryption.EncryptionService +import io.element.android.libraries.matrix.api.encryption.RecoveryState import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus import io.element.android.libraries.push.api.PushService +import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.flow.map import javax.inject.Inject @@ -38,6 +43,8 @@ class LoggedInPresenter @Inject constructor( private val networkMonitor: NetworkMonitor, private val pushService: PushService, private val sessionVerificationService: SessionVerificationService, + private val analyticsService: AnalyticsService, + private val encryptionService: EncryptionService, ) : Presenter { @Composable override fun present(): LoggedInState { @@ -62,8 +69,34 @@ class LoggedInPresenter @Inject constructor( networkStatus == NetworkStatus.Online && syncIndicator == RoomListService.SyncIndicator.Show } } + val verificationState by sessionVerificationService.sessionVerifiedStatus.collectAsState() + val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState() + reportCryptoStatusToAnalytics(verificationState, recoveryState) + return LoggedInState( showSyncSpinner = showSyncSpinner, ) } + + private fun reportCryptoStatusToAnalytics(verificationState: SessionVerifiedStatus, recoveryState: RecoveryState) { + // Update first the user property, to store the current status for that posthog user + val userVerificationState = verificationState.toAnalyticsUserPropertyValue() + val userRecoveryState = recoveryState.toAnalyticsUserPropertyValue() + if (userRecoveryState != null && userVerificationState != null) { + // we want to report when both value are known (if one is unknown we wait until we have them both) + analyticsService.updateUserProperties( + UserProperties( + verificationState = userVerificationState, + recoveryState = userRecoveryState + ) + ) + } + + // Also report when there is a change in the state, to be able to track the changes + val changeVerificationState = verificationState.toAnalyticsStateChangeValue() + val changeRecoveryState = recoveryState.toAnalyticsStateChangeValue() + if (changeVerificationState != null && changeRecoveryState != null) { + analyticsService.capture(CryptoSessionStateChange(changeRecoveryState, changeVerificationState)) + } + } } diff --git a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt index df17053512..d1b89fca77 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt @@ -24,9 +24,11 @@ import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.features.networkmonitor.test.FakeNetworkMonitor import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.test.FakeMatrixClient +import io.element.android.libraries.matrix.test.encryption.FakeEncryptionService import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService import io.element.android.libraries.push.test.FakePushService +import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.consumeItemsUntilPredicate import kotlinx.coroutines.test.runTest @@ -73,6 +75,8 @@ class LoggedInPresenterTest { networkMonitor = FakeNetworkMonitor(networkStatus), pushService = FakePushService(), sessionVerificationService = FakeSessionVerificationService(), + analyticsService = FakeAnalyticsService(), + encryptionService = FakeEncryptionService() ) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index db8cfe6b6a..1d5ee6c65b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -183,7 +183,7 @@ kotlinpoet = "com.squareup:kotlinpoet:1.16.0" posthog = "com.posthog:posthog-android:3.1.18" sentry = "io.sentry:sentry-android:7.8.0" # main branch can be tested replacing the version with main-SNAPSHOT -matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.20.0" +matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.21.0" # Emojibase matrix_emojibase_bindings = "io.element.android:emojibase-bindings:1.1.3" diff --git a/services/analyticsproviders/posthog/build.gradle.kts b/services/analyticsproviders/posthog/build.gradle.kts index c9049af237..8a923d4918 100644 --- a/services/analyticsproviders/posthog/build.gradle.kts +++ b/services/analyticsproviders/posthog/build.gradle.kts @@ -34,4 +34,10 @@ dependencies { implementation(projects.libraries.core) implementation(projects.libraries.di) implementation(projects.services.analyticsproviders.api) + + testImplementation(libs.coroutines.test) + testImplementation(libs.test.truth) + testImplementation(libs.test.junit) + testImplementation(projects.tests.testutils) + testImplementation(libs.test.mockk) } diff --git a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt index fb542b7f28..b594dcbee4 100644 --- a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt +++ b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt @@ -40,6 +40,10 @@ class PosthogAnalyticsProvider @Inject constructor( private var posthog: PostHogInterface? = null private var analyticsId: String? = null + private var pendingUserProperties: MutableMap? = null + + private val userPropertiesLock = Any() + override fun init() { posthog = createPosthog() posthog?.optIn() @@ -57,10 +61,14 @@ class PosthogAnalyticsProvider @Inject constructor( } override fun capture(event: VectorAnalyticsEvent) { - posthog?.capture( - event = event.getName(), - properties = event.getProperties()?.keepOnlyNonNullValues().withExtraProperties(), - ) + synchronized(userPropertiesLock) { + posthog?.capture( + event = event.getName(), + properties = event.getProperties()?.keepOnlyNonNullValues().withExtraProperties(), + userProperties = pendingUserProperties, + ) + pendingUserProperties = null + } } override fun screen(screen: VectorAnalyticsScreen) { @@ -71,10 +79,19 @@ class PosthogAnalyticsProvider @Inject constructor( } override fun updateUserProperties(userProperties: UserProperties) { -// posthog?.identify( -// REUSE_EXISTING_ID, userProperties.getProperties()?.toPostHogUserProperties(), -// IGNORED_OPTIONS -// ) + synchronized(userPropertiesLock) { + // The pending properties will be sent with the following capture call + if (pendingUserProperties == null) { + pendingUserProperties = HashMap() + } + userProperties.getProperties()?.let { + pendingUserProperties?.putAll(it) + } + // We are not currently using `identify` in EIX, if it was the case + // we could have called identify to update the user properties. + // For now, we have to store them, and they will be updated when the next call + // to capture will happen. + } } override fun trackError(throwable: Throwable) { diff --git a/services/analyticsproviders/posthog/src/test/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProviderTest.kt b/services/analyticsproviders/posthog/src/test/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProviderTest.kt new file mode 100644 index 0000000000..9032ea5718 --- /dev/null +++ b/services/analyticsproviders/posthog/src/test/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProviderTest.kt @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.services.analyticsproviders.posthog + +import com.google.common.truth.Truth.assertThat +import com.posthog.PostHogInterface +import im.vector.app.features.analytics.itf.VectorAnalyticsEvent +import im.vector.app.features.analytics.plan.UserProperties +import io.element.android.tests.testutils.WarmUpRule +import io.mockk.every +import io.mockk.just +import io.mockk.mockk +import io.mockk.runs +import io.mockk.slot +import io.mockk.verify +import kotlinx.coroutines.test.runTest +import org.junit.Rule +import org.junit.Test + +class PosthogAnalyticsProviderTest { + @get:Rule + val warmUpRule = WarmUpRule() + + @Test + fun `Posthog - Test user properties`() = runTest { + val mockPosthog = mockk().also { + every { it.optIn() } just runs + every { it.capture(any(), any(), any(), any(), any(), any()) } just runs + } + val mockPosthogFactory = mockk() + every { mockPosthogFactory.createPosthog() } returns mockPosthog + + val analyticsProvider = PosthogAnalyticsProvider(mockPosthogFactory) + analyticsProvider.init() + + val testUserProperties = UserProperties( + verificationState = UserProperties.VerificationState.Verified, + recoveryState = UserProperties.RecoveryState.Incomplete, + ) + analyticsProvider.updateUserProperties(testUserProperties) + + // report mock event + val mockEvent = mockk().also { + every { + it.getProperties() + } returns emptyMap() + every { it.getName() } returns "MockEventName" + } + analyticsProvider.capture(mockEvent) + val userPropertiesSlot = slot>() + + verify { mockPosthog.capture(event = "MockEventName", any(), any(), userProperties = capture(userPropertiesSlot)) } + + assertThat(userPropertiesSlot.captured).isNotNull() + assertThat(userPropertiesSlot.captured["verificationState"] as String).isEqualTo(testUserProperties.verificationState?.name) + assertThat(userPropertiesSlot.captured["recoveryState"] as String).isEqualTo(testUserProperties.recoveryState?.name) + + // Should only be reported once when the next event is sent + // Try another capture to check + analyticsProvider.capture(mockEvent) + verify { mockPosthog.capture(any(), any(), any(), userProperties = null) } + } + + @Test + fun `Posthog - Test accumulate user properties until next capture call`() = runTest { + val mockPosthog = mockk().also { + every { it.optIn() } just runs + every { it.capture(any(), any(), any(), any(), any(), any()) } just runs + } + val mockPosthogFactory = mockk() + every { mockPosthogFactory.createPosthog() } returns mockPosthog + + val analyticsProvider = PosthogAnalyticsProvider(mockPosthogFactory) + analyticsProvider.init() + + val testUserProperties = UserProperties( + verificationState = UserProperties.VerificationState.NotVerified, + ) + analyticsProvider.updateUserProperties(testUserProperties) + + // Update again + val testUserPropertiesUpdate = UserProperties( + verificationState = UserProperties.VerificationState.Verified, + ) + analyticsProvider.updateUserProperties(testUserPropertiesUpdate) + + // report mock event + val mockEvent = mockk().also { + every { + it.getProperties() + } returns emptyMap() + every { it.getName() } returns "MockEventName" + } + analyticsProvider.capture(mockEvent) + val userPropertiesSlot = slot>() + + verify { mockPosthog.capture(event = "MockEventName", any(), any(), userProperties = capture(userPropertiesSlot)) } + + assertThat(userPropertiesSlot.captured).isNotNull() + assertThat(userPropertiesSlot.captured["verificationState"] as String).isEqualTo(testUserPropertiesUpdate.verificationState?.name) + } +} From 6ad40fc6e0fb1ad6cded97be967eabb2d17d0d73 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 7 May 2024 09:38:26 +0200 Subject: [PATCH 269/289] Code review - more tests --- .../AnalyticsVerificationStateMappingTests.kt | 70 +++++++++++++++++++ .../appnav/loggedin/LoggedInPresenterTest.kt | 46 +++++++++++- .../FakeSessionVerificationService.kt | 4 ++ .../analytics/test/FakeAnalyticsService.kt | 2 + .../posthog/PosthogAnalyticsProvider.kt | 2 +- 5 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 appnav/src/test/kotlin/io/element/android/appnav/loggedin/AnalyticsVerificationStateMappingTests.kt diff --git a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/AnalyticsVerificationStateMappingTests.kt b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/AnalyticsVerificationStateMappingTests.kt new file mode 100644 index 0000000000..cce8879d4f --- /dev/null +++ b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/AnalyticsVerificationStateMappingTests.kt @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.appnav.loggedin + +import com.google.common.truth.Truth.assertThat +import im.vector.app.features.analytics.plan.CryptoSessionStateChange +import im.vector.app.features.analytics.plan.UserProperties +import io.element.android.libraries.matrix.api.encryption.RecoveryState +import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus +import io.element.android.tests.testutils.WarmUpRule +import kotlinx.coroutines.test.runTest +import org.junit.Rule +import org.junit.Test + +class AnalyticsVerificationStateMappingTests { + @get:Rule + val warmUpRule = WarmUpRule() + + @Test + fun `Test verification Mappings`() = runTest { + assertThat(SessionVerifiedStatus.Verified.toAnalyticsUserPropertyValue()) + .isEqualTo(UserProperties.VerificationState.Verified) + assertThat(SessionVerifiedStatus.NotVerified.toAnalyticsUserPropertyValue()) + .isEqualTo(UserProperties.VerificationState.NotVerified) + + assertThat(SessionVerifiedStatus.Verified.toAnalyticsStateChangeValue()) + .isEqualTo(CryptoSessionStateChange.VerificationState.Verified) + assertThat(SessionVerifiedStatus.NotVerified.toAnalyticsStateChangeValue()) + .isEqualTo(CryptoSessionStateChange.VerificationState.NotVerified) + } + + @Test + fun `Test recovery state Mappings`() = runTest { + assertThat(RecoveryState.UNKNOWN.toAnalyticsUserPropertyValue()) + .isNull() + assertThat(RecoveryState.WAITING_FOR_SYNC.toAnalyticsUserPropertyValue()) + .isNull() + assertThat(RecoveryState.INCOMPLETE.toAnalyticsUserPropertyValue()) + .isEqualTo(UserProperties.RecoveryState.Incomplete) + assertThat(RecoveryState.ENABLED.toAnalyticsUserPropertyValue()) + .isEqualTo(UserProperties.RecoveryState.Enabled) + assertThat(RecoveryState.DISABLED.toAnalyticsUserPropertyValue()) + .isEqualTo(UserProperties.RecoveryState.Disabled) + + assertThat(RecoveryState.UNKNOWN.toAnalyticsStateChangeValue()) + .isNull() + assertThat(RecoveryState.WAITING_FOR_SYNC.toAnalyticsStateChangeValue()) + .isNull() + assertThat(RecoveryState.INCOMPLETE.toAnalyticsStateChangeValue()) + .isEqualTo(CryptoSessionStateChange.RecoveryState.Incomplete) + assertThat(RecoveryState.ENABLED.toAnalyticsStateChangeValue()) + .isEqualTo(CryptoSessionStateChange.RecoveryState.Enabled) + assertThat(RecoveryState.DISABLED.toAnalyticsStateChangeValue()) + .isEqualTo(CryptoSessionStateChange.RecoveryState.Disabled) + } +} diff --git a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt index d1b89fca77..2678c125e5 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt @@ -20,9 +20,13 @@ import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import im.vector.app.features.analytics.plan.CryptoSessionStateChange +import im.vector.app.features.analytics.plan.UserProperties import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.features.networkmonitor.test.FakeNetworkMonitor +import io.element.android.libraries.matrix.api.encryption.RecoveryState import io.element.android.libraries.matrix.api.roomlist.RoomListService +import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.encryption.FakeEncryptionService import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService @@ -66,17 +70,53 @@ class LoggedInPresenterTest { } } + @Test + fun `present - report crypto status analytics`() = runTest { + val analyticsService = FakeAnalyticsService() + val verificationService = FakeSessionVerificationService() + val encryptionService = FakeEncryptionService() + val presenter = LoggedInPresenter( + matrixClient = FakeMatrixClient(encryptionService = encryptionService), + networkMonitor = FakeNetworkMonitor(NetworkStatus.Online), + pushService = FakePushService(), + sessionVerificationService = verificationService, + analyticsService = analyticsService, + encryptionService = encryptionService + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + encryptionService.emitRecoveryState(RecoveryState.UNKNOWN) + encryptionService.emitRecoveryState(RecoveryState.INCOMPLETE) + verificationService.emitVerifiedStatus(SessionVerifiedStatus.Verified) + + // Should only capture once (not report while checking state -like unknown-) + consumeItemsUntilPredicate { + analyticsService.capturedEvents.size == 1 && + analyticsService.capturedEvents[0] is CryptoSessionStateChange + } + consumeItemsUntilPredicate { + analyticsService.capturedUserProperties.size == 1 && + analyticsService.capturedUserProperties[0].recoveryState == UserProperties.RecoveryState.Incomplete && + analyticsService.capturedUserProperties[0].verificationState == UserProperties.VerificationState.Verified + } + cancelAndConsumeRemainingEvents() + } + } + private fun createLoggedInPresenter( roomListService: RoomListService = FakeRoomListService(), - networkStatus: NetworkStatus = NetworkStatus.Offline + networkStatus: NetworkStatus = NetworkStatus.Offline, + analyticsService: FakeAnalyticsService = FakeAnalyticsService(), + encryptionService: FakeEncryptionService = FakeEncryptionService(), ): LoggedInPresenter { return LoggedInPresenter( matrixClient = FakeMatrixClient(roomListService = roomListService), networkMonitor = FakeNetworkMonitor(networkStatus), pushService = FakePushService(), sessionVerificationService = FakeSessionVerificationService(), - analyticsService = FakeAnalyticsService(), - encryptionService = FakeEncryptionService() + analyticsService = analyticsService, + encryptionService = encryptionService ) } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/verification/FakeSessionVerificationService.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/verification/FakeSessionVerificationService.kt index 64c7c8ab97..cde77d7c61 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/verification/FakeSessionVerificationService.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/verification/FakeSessionVerificationService.kt @@ -77,6 +77,10 @@ class FakeSessionVerificationService : SessionVerificationService { _sessionVerifiedStatus.value = status } + suspend fun emitVerifiedStatus(status: SessionVerifiedStatus) { + _sessionVerifiedStatus.emit(status) + } + fun givenVerificationFlowState(state: VerificationFlowState) { _verificationFlowState.value = state } diff --git a/services/analytics/test/src/main/kotlin/io/element/android/services/analytics/test/FakeAnalyticsService.kt b/services/analytics/test/src/main/kotlin/io/element/android/services/analytics/test/FakeAnalyticsService.kt index 14ef329ae4..2d9f320422 100644 --- a/services/analytics/test/src/main/kotlin/io/element/android/services/analytics/test/FakeAnalyticsService.kt +++ b/services/analytics/test/src/main/kotlin/io/element/android/services/analytics/test/FakeAnalyticsService.kt @@ -33,6 +33,7 @@ class FakeAnalyticsService( val capturedEvents = mutableListOf() val screenEvents = mutableListOf() val trackedErrors = mutableListOf() + val capturedUserProperties = mutableListOf() override fun getAvailableAnalyticsProviders(): Set = emptySet() @@ -65,6 +66,7 @@ class FakeAnalyticsService( } override fun updateUserProperties(userProperties: UserProperties) { + capturedUserProperties += userProperties } override fun trackError(throwable: Throwable) { diff --git a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt index b594dcbee4..fb121aeb5e 100644 --- a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt +++ b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt @@ -87,7 +87,7 @@ class PosthogAnalyticsProvider @Inject constructor( userProperties.getProperties()?.let { pendingUserProperties?.putAll(it) } - // We are not currently using `identify` in EIX, if it was the case + // We are not currently using `identify` in EAX, if it was the case // we could have called identify to update the user properties. // For now, we have to store them, and they will be updated when the next call // to capture will happen. From 3170691a2fed6ac135cd293ccd80e6e1e5508239 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 7 May 2024 09:40:37 +0200 Subject: [PATCH 270/289] Add change log --- changelog.d/2806.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2806.misc diff --git a/changelog.d/2806.misc b/changelog.d/2806.misc new file mode 100644 index 0000000000..5f6f53667b --- /dev/null +++ b/changelog.d/2806.misc @@ -0,0 +1 @@ +Analytics: Add support to report current session verification and recovery state From a8f5c8db39a811901e7a90a2afb04c12cfcd9728 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 7 May 2024 10:41:08 +0200 Subject: [PATCH 271/289] Use LaunchedEffect and improve test --- .../appnav/loggedin/LoggedInPresenter.kt | 4 ++- .../appnav/loggedin/LoggedInPresenterTest.kt | 27 ++++++++++--------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt index 0feaf47029..313f4aafe0 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt @@ -71,7 +71,9 @@ class LoggedInPresenter @Inject constructor( } val verificationState by sessionVerificationService.sessionVerifiedStatus.collectAsState() val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState() - reportCryptoStatusToAnalytics(verificationState, recoveryState) + LaunchedEffect(verificationState, recoveryState) { + reportCryptoStatusToAnalytics(verificationState, recoveryState) + } return LoggedInState( showSyncSpinner = showSyncSpinner, diff --git a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt index 2678c125e5..f57f648599 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt @@ -73,10 +73,11 @@ class LoggedInPresenterTest { @Test fun `present - report crypto status analytics`() = runTest { val analyticsService = FakeAnalyticsService() + val roomListService = FakeRoomListService() val verificationService = FakeSessionVerificationService() val encryptionService = FakeEncryptionService() val presenter = LoggedInPresenter( - matrixClient = FakeMatrixClient(encryptionService = encryptionService), + matrixClient = FakeMatrixClient(roomListService = roomListService, encryptionService = encryptionService), networkMonitor = FakeNetworkMonitor(NetworkStatus.Online), pushService = FakePushService(), sessionVerificationService = verificationService, @@ -90,17 +91,19 @@ class LoggedInPresenterTest { encryptionService.emitRecoveryState(RecoveryState.INCOMPLETE) verificationService.emitVerifiedStatus(SessionVerifiedStatus.Verified) - // Should only capture once (not report while checking state -like unknown-) - consumeItemsUntilPredicate { - analyticsService.capturedEvents.size == 1 && - analyticsService.capturedEvents[0] is CryptoSessionStateChange - } - consumeItemsUntilPredicate { - analyticsService.capturedUserProperties.size == 1 && - analyticsService.capturedUserProperties[0].recoveryState == UserProperties.RecoveryState.Incomplete && - analyticsService.capturedUserProperties[0].verificationState == UserProperties.VerificationState.Verified - } - cancelAndConsumeRemainingEvents() + skipItems(4) + + assertThat(analyticsService.capturedEvents.size).isEqualTo(1) + assertThat(analyticsService.capturedEvents[0]).isInstanceOf(CryptoSessionStateChange::class.java) + + assertThat(analyticsService.capturedUserProperties.size).isEqualTo(1) + assertThat(analyticsService.capturedUserProperties[0].recoveryState).isEqualTo(UserProperties.RecoveryState.Incomplete) + assertThat(analyticsService.capturedUserProperties[0].verificationState).isEqualTo(UserProperties.VerificationState.Verified) + + // ensure a sync status change does not trigger a new capture + roomListService.postSyncIndicator(RoomListService.SyncIndicator.Show) + skipItems(1) + assertThat(analyticsService.capturedEvents.size).isEqualTo(1) } } From 5c59f6c20f69322d27b1ebf269dfed2b1af781d4 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 7 May 2024 16:06:34 +0200 Subject: [PATCH 272/289] Enforce mandatory session verification only for new logins (#2811) * Enforce mandatory session verification only for new logins - Creates `AppMigration` base interface as a way to isolate migration logic, app migrations must implement this interface. - Creates `AppMigration01` with the existing logs removal migration and `AppMigration02` with the logic to allow existing sessions to skip verification. - Add `DefaultSessionPreferencesStoreFactory.remove(sessionId)` to allow a ephemeral session store access to exist outside the `SessionScope` for this new migration. * Fix tests * Add more tests. This also includes creating several abstractions. * Review changes. - Make `orderedMigrations` a class property, `migrations` just a constructor parameter to avoid incorrect usages. - Create `lastMigration` property too, use it instead of `MIGRATION_VERSION`. --- changelog.d/2810.bugfix | 1 + .../utils/DefaultCallWidgetProviderTest.kt | 2 +- .../ftue/impl/DefaultFtueServiceTests.kt | 2 +- .../messages/impl/MessagesPresenterTest.kt | 4 +- .../actionlist/ActionListPresenterTest.kt | 2 +- .../MessageComposerPresenterTest.kt | 2 +- .../impl/timeline/TimelinePresenterTest.kt | 2 +- .../typing/TypingNotificationPresenterTest.kt | 2 +- features/migration/impl/build.gradle.kts | 6 +++ .../migration/impl/MigrationPresenter.kt | 45 +++++++++-------- .../migration/impl/migrations/AppMigration.kt | 22 ++++++++ .../impl/migrations/AppMigration01.kt | 33 ++++++++++++ .../impl/migrations/AppMigration02.kt | 45 +++++++++++++++++ .../migration/impl/MigrationPresenterTest.kt | 34 +++++++++---- .../impl/migrations/AppMigration01Test.kt | 33 ++++++++++++ .../impl/migrations/AppMigration02Test.kt | 50 +++++++++++++++++++ .../advanced/AdvancedSettingsPresenterTest.kt | 4 +- .../DeveloperSettingsPresenterTest.kt | 2 +- .../test/logs/FakeLogFilesRemover.kt | 3 +- .../roomlist/impl/RoomListPresenterTests.kt | 2 +- .../impl/VerifySelfSessionPresenterTests.kt | 2 +- libraries/preferences/api/build.gradle.kts | 1 + .../store/SessionPreferencesStoreFactory.kt | 25 ++++++++++ .../DefaultSessionPreferencesStoreFactory.kt | 12 ++++- libraries/preferences/test/build.gradle.kts | 2 + .../test/FakeSessionPreferenceStoreFactory.kt | 38 ++++++++++++++ .../test/InMemoryAppPreferencesStore.kt | 2 +- .../test/InMemorySessionPreferencesStore.kt | 2 +- .../session-storage/test/build.gradle.kts | 1 + .../sessionstorage/test/SessionData.kt | 40 +++++++++++++++ 30 files changed, 370 insertions(+), 51 deletions(-) create mode 100644 changelog.d/2810.bugfix create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration.kt create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt create mode 100644 features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01Test.kt create mode 100644 features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02Test.kt create mode 100644 libraries/preferences/api/src/main/kotlin/io/element/android/features/preferences/api/store/SessionPreferencesStoreFactory.kt create mode 100644 libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/FakeSessionPreferenceStoreFactory.kt rename libraries/preferences/test/src/main/kotlin/io/element/android/libraries/{featureflag => preferences}/test/InMemoryAppPreferencesStore.kt (97%) rename libraries/preferences/test/src/main/kotlin/io/element/android/libraries/{featureflag => preferences}/test/InMemorySessionPreferencesStore.kt (98%) create mode 100644 libraries/session-storage/test/src/main/kotlin/io/element/android/libraries/sessionstorage/test/SessionData.kt diff --git a/changelog.d/2810.bugfix b/changelog.d/2810.bugfix new file mode 100644 index 0000000000..d6683a221a --- /dev/null +++ b/changelog.d/2810.bugfix @@ -0,0 +1 @@ +Enforce mandatory session verification only for new logins. diff --git a/features/call/src/test/kotlin/io/element/android/features/call/utils/DefaultCallWidgetProviderTest.kt b/features/call/src/test/kotlin/io/element/android/features/call/utils/DefaultCallWidgetProviderTest.kt index 31f6327d2f..368db19fcc 100644 --- a/features/call/src/test/kotlin/io/element/android/features/call/utils/DefaultCallWidgetProviderTest.kt +++ b/features/call/src/test/kotlin/io/element/android/features/call/utils/DefaultCallWidgetProviderTest.kt @@ -18,7 +18,6 @@ package io.element.android.features.call.utils import com.google.common.truth.Truth.assertThat import io.element.android.features.preferences.api.store.AppPreferencesStore -import io.element.android.libraries.featureflag.test.InMemoryAppPreferencesStore import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider import io.element.android.libraries.matrix.test.A_ROOM_ID @@ -28,6 +27,7 @@ import io.element.android.libraries.matrix.test.FakeMatrixClientProvider import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.widget.FakeCallWidgetSettingsProvider import io.element.android.libraries.matrix.test.widget.FakeWidgetDriver +import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore import kotlinx.coroutines.test.runTest import org.junit.Test diff --git a/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTests.kt b/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTests.kt index 9cc3db8d29..e346e3a1dc 100644 --- a/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTests.kt +++ b/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTests.kt @@ -24,10 +24,10 @@ import io.element.android.features.ftue.impl.state.DefaultFtueService import io.element.android.features.ftue.impl.state.FtueStep import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.lockscreen.test.FakeLockScreenService -import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService import io.element.android.libraries.permissions.impl.FakePermissionStateProvider +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.services.toolbox.test.sdk.FakeBuildVersionSdkIntProvider diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 2774b71aef..8ef9d3d268 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -63,8 +63,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.FakeFeatureFlagService -import io.element.android.libraries.featureflag.test.InMemoryAppPreferencesStore -import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.room.MatrixRoom @@ -93,6 +91,8 @@ import io.element.android.libraries.mediaviewer.test.FakeLocalMediaFactory import io.element.android.libraries.permissions.api.PermissionsPresenter import io.element.android.libraries.permissions.test.FakePermissionsPresenter import io.element.android.libraries.permissions.test.FakePermissionsPresenterFactory +import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.libraries.textcomposer.model.MessageComposerMode import io.element.android.libraries.voicerecorder.test.FakeVoiceRecorder import io.element.android.services.analytics.test.FakeAnalyticsService diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenterTest.kt index c1062625f7..39ffda04b2 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenterTest.kt @@ -30,8 +30,8 @@ import io.element.android.features.messages.impl.timeline.model.event.aTimelineI import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemStateEventContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemVoiceContent import io.element.android.features.poll.api.pollcontent.aPollAnswerItemList -import io.element.android.libraries.featureflag.test.InMemoryAppPreferencesStore import io.element.android.libraries.matrix.test.A_MESSAGE +import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore import io.element.android.tests.testutils.WarmUpRule import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.test.runTest diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt index 0e83aa84ec..7274027059 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/textcomposer/MessageComposerPresenterTest.kt @@ -39,7 +39,6 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatch import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.FakeFeatureFlagService -import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.TransactionId import io.element.android.libraries.matrix.api.media.ImageInfo @@ -77,6 +76,7 @@ import io.element.android.libraries.mediaviewer.test.FakeLocalMediaFactory import io.element.android.libraries.permissions.api.PermissionsPresenter import io.element.android.libraries.permissions.test.FakePermissionsPresenter import io.element.android.libraries.permissions.test.FakePermissionsPresenterFactory +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.libraries.textcomposer.model.Message import io.element.android.libraries.textcomposer.model.MessageComposerMode import io.element.android.libraries.textcomposer.model.Suggestion diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt index 093306db09..bfca79d714 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenterTest.kt @@ -34,7 +34,6 @@ import io.element.android.features.poll.api.actions.EndPollAction import io.element.android.features.poll.api.actions.SendPollResponseAction import io.element.android.features.poll.test.actions.FakeEndPollAction import io.element.android.features.poll.test.actions.FakeSendPollResponseAction -import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem @@ -53,6 +52,7 @@ import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.matrix.test.timeline.aMessageContent import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem import io.element.android.libraries.matrix.ui.components.aMatrixUserList +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.awaitLastSequentialItem import io.element.android.tests.testutils.consumeItemsUntilPredicate diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenterTest.kt index 540d9f67c4..b136053b40 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenterTest.kt @@ -22,7 +22,6 @@ import app.cash.turbine.Event import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.preferences.api.store.SessionPreferencesStore -import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState @@ -32,6 +31,7 @@ import io.element.android.libraries.matrix.test.A_USER_ID_3 import io.element.android.libraries.matrix.test.A_USER_ID_4 import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.aRoomInfo +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.tests.testutils.WarmUpRule import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.test.runTest diff --git a/features/migration/impl/build.gradle.kts b/features/migration/impl/build.gradle.kts index 5ae18e8791..2c8ffa58b3 100644 --- a/features/migration/impl/build.gradle.kts +++ b/features/migration/impl/build.gradle.kts @@ -27,9 +27,12 @@ android { dependencies { implementation(projects.features.migration.api) implementation(projects.libraries.architecture) + implementation(projects.libraries.preferences.impl) implementation(libs.androidx.datastore.preferences) implementation(projects.features.rageshake.api) implementation(projects.libraries.designsystem) + implementation(projects.libraries.matrix.api) + implementation(projects.libraries.sessionStorage.api) implementation(projects.libraries.uiStrings) ksp(libs.showkase.processor) @@ -39,6 +42,9 @@ dependencies { testImplementation(libs.molecule.runtime) testImplementation(libs.test.truth) testImplementation(libs.test.turbine) + testImplementation(projects.libraries.sessionStorage.implMemory) + testImplementation(projects.libraries.sessionStorage.test) + testImplementation(projects.libraries.preferences.test) testImplementation(projects.tests.testutils) testImplementation(projects.features.rageshake.test) } diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt index 48f904ea67..d157566e24 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt @@ -24,50 +24,51 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import io.element.android.features.api.MigrationState -import io.element.android.features.rageshake.api.logs.LogFilesRemover +import io.element.android.features.migration.impl.migrations.AppMigration import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.di.AppScope +import io.element.android.libraries.di.SingleIn +import timber.log.Timber import javax.inject.Inject +@SingleIn(AppScope::class) class MigrationPresenter @Inject constructor( private val migrationStore: MigrationStore, - private val logFilesRemover: LogFilesRemover, + migrations: Set<@JvmSuppressWildcards AppMigration>, ) : Presenter { + private val orderedMigrations = migrations.sortedBy { it.order } + private val lastMigration: Int = orderedMigrations.lastOrNull()?.order ?: 0 + @Composable override fun present(): MigrationState { - val migrationStoreVersion = migrationStore.applicationMigrationVersion().collectAsState(initial = null) + val migrationStoreVersion by migrationStore.applicationMigrationVersion().collectAsState(initial = null) var migrationAction: AsyncData by remember { mutableStateOf(AsyncData.Uninitialized) } - /* // Uncomment this block to run the migration everytime - LaunchedEffect(Unit) { - migrationStore.setApplicationMigrationVersion(0) - } - */ +// LaunchedEffect(Unit) { +// Timber.d("Resetting migration version to 0") +// migrationStore.setApplicationMigrationVersion(0) +// } - LaunchedEffect(migrationStoreVersion.value) { - val migrationValue = migrationStoreVersion.value ?: return@LaunchedEffect - if (migrationValue == MIGRATION_VERSION) { + LaunchedEffect(migrationStoreVersion) { + val migrationValue = migrationStoreVersion ?: return@LaunchedEffect + if (migrationValue == lastMigration) { + Timber.d("Current app migration version: $migrationValue. No migration needed.") migrationAction = AsyncData.Success(Unit) return@LaunchedEffect } migrationAction = AsyncData.Loading(Unit) - if (migrationValue < 1) { - logFilesRemover.perform() + val nextMigration = orderedMigrations.firstOrNull { it.order > migrationValue } + if (nextMigration != null) { + Timber.d("Current app migration version: $migrationValue. Applying migration: ${nextMigration.order}") + nextMigration.migrate() + migrationStore.setApplicationMigrationVersion(nextMigration.order) } - // Add new step here - - migrationStore.setApplicationMigrationVersion(MIGRATION_VERSION) } return MigrationState( migrationAction = migrationAction, ) } - - companion object { - // Increment this value when you need to run the migration again, and - // add step in the LaunchedEffect above - const val MIGRATION_VERSION = 1 - } } diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration.kt new file mode 100644 index 0000000000..4227bbc717 --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration.kt @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl.migrations + +interface AppMigration { + val order: Int + suspend fun migrate() +} diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt new file mode 100644 index 0000000000..91a89d7aa4 --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl.migrations + +import com.squareup.anvil.annotations.ContributesMultibinding +import io.element.android.features.rageshake.api.logs.LogFilesRemover +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +@ContributesMultibinding(AppScope::class) +class AppMigration01 @Inject constructor( + private val logFilesRemover: LogFilesRemover, +) : AppMigration { + override val order: Int = 1 + + override suspend fun migrate() { + logFilesRemover.perform() + } +} diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt new file mode 100644 index 0000000000..410a382ff3 --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl.migrations + +import com.squareup.anvil.annotations.ContributesMultibinding +import io.element.android.features.preferences.api.store.SessionPreferencesStoreFactory +import io.element.android.libraries.di.AppScope +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.sessionstorage.api.SessionStore +import kotlinx.coroutines.coroutineScope +import javax.inject.Inject + +@ContributesMultibinding(AppScope::class) +class AppMigration02 @Inject constructor( + private val sessionStore: SessionStore, + private val sessionPreferenceStoreFactory: SessionPreferencesStoreFactory, +) : AppMigration { + override val order: Int = 2 + + override suspend fun migrate() { + coroutineScope { + for (session in sessionStore.getAllSessions()) { + val sessionId = SessionId(session.userId) + val preferences = sessionPreferenceStoreFactory.get(sessionId, this) + preferences.setSkipSessionVerification(true) + // This session preference store must be ephemeral since it's not created with the right coroutine scope + sessionPreferenceStoreFactory.remove(sessionId) + } + } + } +} diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt index 01b2d847a7..3ea0625f76 100644 --- a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt @@ -20,10 +20,11 @@ import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat -import io.element.android.features.rageshake.api.logs.LogFilesRemover -import io.element.android.features.rageshake.test.logs.FakeLogFilesRemover +import io.element.android.features.migration.impl.migrations.AppMigration import io.element.android.libraries.architecture.AsyncData import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.consumeItemsUntilPredicate +import io.element.android.tests.testutils.lambda.LambdaNoParamRecorder import io.element.android.tests.testutils.lambda.lambdaRecorder import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest @@ -36,9 +37,11 @@ class MigrationPresenterTest { @Test fun `present - no migration should occurs if ApplicationMigrationVersion is the last one`() = runTest { - val store = InMemoryMigrationStore(MigrationPresenter.MIGRATION_VERSION) + val migrations = (1..10).map { FakeMigration(it) } + val store = InMemoryMigrationStore(migrations.maxOf { it.order }) val presenter = createPresenter( migrationStore = store, + migrations = migrations.toSet(), ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -54,10 +57,10 @@ class MigrationPresenterTest { @Test fun `present - testing all migrations`() = runTest { val store = InMemoryMigrationStore(0) - val logFilesRemoverLambda = lambdaRecorder { -> } + val migrations = (1..10).map { FakeMigration(it) } val presenter = createPresenter( migrationStore = store, - logFilesRemover = FakeLogFilesRemover(logFilesRemoverLambda), + migrations = migrations.toSet(), ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -67,19 +70,28 @@ class MigrationPresenterTest { awaitItem().also { state -> assertThat(state.migrationAction).isEqualTo(AsyncData.Loading(Unit)) } - awaitItem().also { state -> - assertThat(state.migrationAction).isEqualTo(AsyncData.Success(Unit)) + consumeItemsUntilPredicate { it.migrationAction is AsyncData.Success } + assertThat(store.applicationMigrationVersion().first()).isEqualTo(migrations.maxOf { it.order }) + for (migration in migrations) { + migration.migrateLambda.assertions().isCalledOnce() } - logFilesRemoverLambda.assertions().isCalledExactly(1) - assertThat(store.applicationMigrationVersion().first()).isEqualTo(MigrationPresenter.MIGRATION_VERSION) } } } private fun createPresenter( migrationStore: MigrationStore = InMemoryMigrationStore(0), - logFilesRemover: LogFilesRemover = FakeLogFilesRemover(lambdaRecorder(ensureNeverCalled = true) { -> }), + migrations: Set = setOf(FakeMigration(1)), ) = MigrationPresenter( migrationStore = migrationStore, - logFilesRemover = logFilesRemover, + migrations = migrations, ) + +private class FakeMigration( + override val order: Int, + var migrateLambda: LambdaNoParamRecorder = lambdaRecorder { -> }, +) : AppMigration { + override suspend fun migrate() { + migrateLambda() + } +} diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01Test.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01Test.kt new file mode 100644 index 0000000000..91f50a81b3 --- /dev/null +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01Test.kt @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl.migrations + +import io.element.android.features.rageshake.test.logs.FakeLogFilesRemover +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class AppMigration01Test { + @Test + fun `test migration`() = runTest { + val logsFileRemover = FakeLogFilesRemover() + val migration = AppMigration01(logsFileRemover) + + migration.migrate() + + logsFileRemover.performLambda.assertions().isCalledOnce() + } +} diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02Test.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02Test.kt new file mode 100644 index 0000000000..1a077fda2e --- /dev/null +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02Test.kt @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl.migrations + +import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.preferences.test.FakeSessionPreferenceStoreFactory +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore +import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore +import io.element.android.libraries.sessionstorage.test.aSessionData +import io.element.android.tests.testutils.lambda.lambdaRecorder +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class AppMigration02Test { + @Test + fun `test migration`() = runTest { + val sessionStore = InMemorySessionStore().apply { + updateData(aSessionData()) + } + val sessionPreferencesStore = InMemorySessionPreferencesStore(isSessionVerificationSkipped = false) + val sessionPreferencesStoreFactory = FakeSessionPreferenceStoreFactory( + getLambda = lambdaRecorder { _, _, -> sessionPreferencesStore }, + ) + val migration = AppMigration02(sessionStore = sessionStore, sessionPreferenceStoreFactory = sessionPreferencesStoreFactory) + + migration.migrate() + + // We got the session preferences store + sessionPreferencesStoreFactory.getLambda.assertions().isCalledOnce() + // We changed the settings for the skipping the session verification + assertThat(sessionPreferencesStore.isSessionVerificationSkipped().first()).isTrue() + // We removed the session preferences store from cache + sessionPreferencesStoreFactory.removeLambda.assertions().isCalledOnce() + } +} diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt index 1745d57396..8f6c45c51d 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenterTest.kt @@ -21,8 +21,8 @@ import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.compound.theme.Theme -import io.element.android.libraries.featureflag.test.InMemoryAppPreferencesStore -import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore +import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.awaitLastSequentialItem import kotlinx.coroutines.test.runTest diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt index 19b1614500..6908ee3c9d 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt @@ -29,7 +29,7 @@ import io.element.android.features.rageshake.test.rageshake.FakeRageshakeDataSto import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.FakeFeatureFlagService -import io.element.android.libraries.featureflag.test.InMemoryAppPreferencesStore +import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.awaitLastSequentialItem import kotlinx.coroutines.test.runTest diff --git a/features/rageshake/test/src/main/kotlin/io/element/android/features/rageshake/test/logs/FakeLogFilesRemover.kt b/features/rageshake/test/src/main/kotlin/io/element/android/features/rageshake/test/logs/FakeLogFilesRemover.kt index a3c927fe41..a416f2eeb4 100644 --- a/features/rageshake/test/src/main/kotlin/io/element/android/features/rageshake/test/logs/FakeLogFilesRemover.kt +++ b/features/rageshake/test/src/main/kotlin/io/element/android/features/rageshake/test/logs/FakeLogFilesRemover.kt @@ -18,9 +18,10 @@ package io.element.android.features.rageshake.test.logs import io.element.android.features.rageshake.api.logs.LogFilesRemover import io.element.android.tests.testutils.lambda.LambdaNoParamRecorder +import io.element.android.tests.testutils.lambda.lambdaRecorder class FakeLogFilesRemover( - private val performLambda: LambdaNoParamRecorder, + var performLambda: LambdaNoParamRecorder = lambdaRecorder { -> }, ) : LogFilesRemover { override suspend fun perform() { performLambda() diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt index bc511d0270..053b4e51a8 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt @@ -48,7 +48,6 @@ import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter import io.element.android.libraries.eventformatter.test.FakeRoomLastMessageFormatter import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.featureflag.test.FakeFeatureFlagService -import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.indicator.impl.DefaultIndicatorService import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.encryption.BackupState @@ -73,6 +72,7 @@ import io.element.android.libraries.matrix.test.room.aRoomSummaryFilled import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService import io.element.android.libraries.matrix.test.sync.FakeSyncService import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.EventsRecorder diff --git a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt index f75dd2ff79..3dd391da16 100644 --- a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt +++ b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/VerifySelfSessionPresenterTests.kt @@ -24,7 +24,6 @@ import com.google.common.truth.Truth.assertThat import io.element.android.features.verifysession.impl.VerifySelfSessionState.VerificationStep import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.encryption.RecoveryState import io.element.android.libraries.matrix.api.verification.SessionVerificationData @@ -35,6 +34,7 @@ import io.element.android.libraries.matrix.api.verification.VerificationFlowStat import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.matrix.test.encryption.FakeEncryptionService import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.tests.testutils.WarmUpRule import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest diff --git a/libraries/preferences/api/build.gradle.kts b/libraries/preferences/api/build.gradle.kts index f782dd328b..f220aacd71 100644 --- a/libraries/preferences/api/build.gradle.kts +++ b/libraries/preferences/api/build.gradle.kts @@ -24,4 +24,5 @@ android { dependencies { implementation(libs.coroutines.core) + implementation(projects.libraries.matrix.api) } diff --git a/libraries/preferences/api/src/main/kotlin/io/element/android/features/preferences/api/store/SessionPreferencesStoreFactory.kt b/libraries/preferences/api/src/main/kotlin/io/element/android/features/preferences/api/store/SessionPreferencesStoreFactory.kt new file mode 100644 index 0000000000..8726f568dd --- /dev/null +++ b/libraries/preferences/api/src/main/kotlin/io/element/android/features/preferences/api/store/SessionPreferencesStoreFactory.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.preferences.api.store + +import io.element.android.libraries.matrix.api.core.SessionId +import kotlinx.coroutines.CoroutineScope + +interface SessionPreferencesStoreFactory { + fun get(sessionId: SessionId, sessionCoroutineScope: CoroutineScope): SessionPreferencesStore + fun remove(sessionId: SessionId) +} diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt index 745dd42615..1465473402 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt @@ -17,6 +17,9 @@ package io.element.android.libraries.preferences.impl.store import android.content.Context +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.features.preferences.api.store.SessionPreferencesStore +import io.element.android.features.preferences.api.store.SessionPreferencesStoreFactory import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.SingleIn @@ -28,10 +31,11 @@ import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject @SingleIn(AppScope::class) +@ContributesBinding(AppScope::class) class DefaultSessionPreferencesStoreFactory @Inject constructor( @ApplicationContext private val context: Context, sessionObserver: SessionObserver, -) { +) : SessionPreferencesStoreFactory { private val cache = ConcurrentHashMap() init { @@ -44,7 +48,11 @@ class DefaultSessionPreferencesStoreFactory @Inject constructor( }) } - fun get(sessionId: SessionId, sessionCoroutineScope: CoroutineScope): DefaultSessionPreferencesStore = cache.getOrPut(sessionId) { + override fun get(sessionId: SessionId, sessionCoroutineScope: CoroutineScope): SessionPreferencesStore = cache.getOrPut(sessionId) { DefaultSessionPreferencesStore(context, sessionId, sessionCoroutineScope) } + + override fun remove(sessionId: SessionId) { + cache.remove(sessionId) + } } diff --git a/libraries/preferences/test/build.gradle.kts b/libraries/preferences/test/build.gradle.kts index 86b891b21e..eaf8c66821 100644 --- a/libraries/preferences/test/build.gradle.kts +++ b/libraries/preferences/test/build.gradle.kts @@ -24,5 +24,7 @@ android { dependencies { api(projects.libraries.preferences.api) implementation(libs.coroutines.core) + implementation(projects.libraries.matrix.api) + implementation(projects.tests.testutils) } } diff --git a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/FakeSessionPreferenceStoreFactory.kt b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/FakeSessionPreferenceStoreFactory.kt new file mode 100644 index 0000000000..264ac4ec3a --- /dev/null +++ b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/FakeSessionPreferenceStoreFactory.kt @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.preferences.test + +import io.element.android.features.preferences.api.store.SessionPreferencesStore +import io.element.android.features.preferences.api.store.SessionPreferencesStoreFactory +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.tests.testutils.lambda.LambdaOneParamRecorder +import io.element.android.tests.testutils.lambda.LambdaTwoParamsRecorder +import io.element.android.tests.testutils.lambda.lambdaRecorder +import kotlinx.coroutines.CoroutineScope + +class FakeSessionPreferenceStoreFactory( + var getLambda: LambdaTwoParamsRecorder = lambdaRecorder { _, _ -> throw NotImplementedError() }, + var removeLambda: LambdaOneParamRecorder = lambdaRecorder { _ -> }, +) : SessionPreferencesStoreFactory { + override fun get(sessionId: SessionId, sessionCoroutineScope: CoroutineScope): SessionPreferencesStore { + return getLambda(sessionId, sessionCoroutineScope) + } + + override fun remove(sessionId: SessionId) { + removeLambda(sessionId) + } +} diff --git a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemoryAppPreferencesStore.kt b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemoryAppPreferencesStore.kt similarity index 97% rename from libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemoryAppPreferencesStore.kt rename to libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemoryAppPreferencesStore.kt index c065622f3f..e29c4758ca 100644 --- a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemoryAppPreferencesStore.kt +++ b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemoryAppPreferencesStore.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.featureflag.test +package io.element.android.libraries.preferences.test import io.element.android.features.preferences.api.store.AppPreferencesStore import kotlinx.coroutines.flow.Flow diff --git a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemorySessionPreferencesStore.kt b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemorySessionPreferencesStore.kt similarity index 98% rename from libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemorySessionPreferencesStore.kt rename to libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemorySessionPreferencesStore.kt index 16f98d0870..916b2ff16f 100644 --- a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/featureflag/test/InMemorySessionPreferencesStore.kt +++ b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemorySessionPreferencesStore.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.featureflag.test +package io.element.android.libraries.preferences.test import io.element.android.features.preferences.api.store.SessionPreferencesStore import kotlinx.coroutines.flow.Flow diff --git a/libraries/session-storage/test/build.gradle.kts b/libraries/session-storage/test/build.gradle.kts index 0c8de84669..cfdddd5e59 100644 --- a/libraries/session-storage/test/build.gradle.kts +++ b/libraries/session-storage/test/build.gradle.kts @@ -22,5 +22,6 @@ android { } dependencies { + implementation(projects.libraries.matrix.api) implementation(projects.libraries.sessionStorage.api) } diff --git a/libraries/session-storage/test/src/main/kotlin/io/element/android/libraries/sessionstorage/test/SessionData.kt b/libraries/session-storage/test/src/main/kotlin/io/element/android/libraries/sessionstorage/test/SessionData.kt new file mode 100644 index 0000000000..84c1142193 --- /dev/null +++ b/libraries/session-storage/test/src/main/kotlin/io/element/android/libraries/sessionstorage/test/SessionData.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.sessionstorage.test + +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.sessionstorage.api.LoginType +import io.element.android.libraries.sessionstorage.api.SessionData + +fun aSessionData( + sessionId: SessionId = SessionId("@alice:server.org"), + isTokenValid: Boolean = false, +): SessionData { + return SessionData( + userId = sessionId.value, + deviceId = "aDeviceId", + accessToken = "anAccessToken", + refreshToken = "aRefreshToken", + homeserverUrl = "aHomeserverUrl", + oidcData = null, + slidingSyncProxy = null, + loginTimestamp = null, + isTokenValid = isTokenValid, + loginType = LoginType.UNKNOWN, + passphrase = null, + ) +} From d86b7d24db7f6cdcee5e0544b54f7e684087a820 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Wed, 8 May 2024 10:58:55 +0200 Subject: [PATCH 273/289] Bump RTE to `v2.37.2` (#2813) This should have been done by the renovate bot, but for some reason it wasn't. --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1d5ee6c65b..e47a555c14 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -43,7 +43,7 @@ serialization_json = "1.6.3" showkase = "1.0.2" appyx = "1.4.0" sqldelight = "2.0.2" -wysiwyg = "2.37.1" +wysiwyg = "2.37.2" telephoto = "0.11.2" # DI From 46b22d7db764143284e80a50eb97c89946878257 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Wed, 8 May 2024 11:42:33 +0200 Subject: [PATCH 274/289] UX cleanup: room details (#2816) * UX cleanup: room details screen Add new CTA buttons for Invite and Call actions * Update screenshots * Fix maestro --------- Co-authored-by: ElementBot --- .../tests/roomList/createAndDeleteRoom.yaml | 2 +- changelog.d/2814.misc | 1 + .../messages/impl/MessagesPresenter.kt | 11 +--- .../messages/impl/MessagesPresenterTest.kt | 17 +++--- features/roomdetails/impl/build.gradle.kts | 3 +- .../roomdetails/impl/RoomDetailsFlowNode.kt | 15 +++++ .../roomdetails/impl/RoomDetailsNode.kt | 6 ++ .../roomdetails/impl/RoomDetailsPresenter.kt | 5 ++ .../roomdetails/impl/RoomDetailsState.kt | 1 + .../impl/RoomDetailsStateProvider.kt | 3 + .../roomdetails/impl/RoomDetailsView.kt | 59 +++++++++---------- .../roomdetails/impl/RoomDetailsViewTest.kt | 23 ++++++-- .../components/button/MainActionButton.kt | 15 +++-- .../matrix/ui/room/MatrixRoomState.kt | 7 +++ .../src/main/res/values/localazy.xml | 1 + ...etailsDark--1_3_null_0,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_1,NEXUS_5,1.0,en].png | 4 +- ...tailsDark--1_3_null_10,NEXUS_5,1.0,en].png | 3 + ...etailsDark--1_3_null_2,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_3,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_4,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_7,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_8,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_9,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_0,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_1,NEXUS_5,1.0,en].png | 4 +- ...omDetails--0_2_null_10,NEXUS_5,1.0,en].png | 3 + ...oomDetails--0_2_null_2,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_3,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_4,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_7,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_8,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_9,NEXUS_5,1.0,en].png | 4 +- ...ainActionButton_0_null,NEXUS_5,1.0,en].png | 4 +- 34 files changed, 149 insertions(+), 94 deletions(-) create mode 100644 changelog.d/2814.misc create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_10,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_10,NEXUS_5,1.0,en].png diff --git a/.maestro/tests/roomList/createAndDeleteRoom.yaml b/.maestro/tests/roomList/createAndDeleteRoom.yaml index 6061915493..ae6f5772c6 100644 --- a/.maestro/tests/roomList/createAndDeleteRoom.yaml +++ b/.maestro/tests/roomList/createAndDeleteRoom.yaml @@ -16,7 +16,7 @@ appId: ${MAESTRO_APP_ID} - tapOn: "Create" - takeScreenshot: build/maestro/320-createAndDeleteRoom - tapOn: "aRoomName" -- tapOn: "Invite people" +- tapOn: "Invite" # assert there's 1 member and 1 invitee - tapOn: "Search for someone" - inputText: ${MAESTRO_INVITEE2_MXID} diff --git a/changelog.d/2814.misc b/changelog.d/2814.misc new file mode 100644 index 0000000000..14fa36637f --- /dev/null +++ b/changelog.d/2814.misc @@ -0,0 +1 @@ +UX cleanup: room details screen, add new CTA buttons for Invite and Call actions. 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 5825d5acfb..e5127ea865 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 @@ -86,6 +86,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState import io.element.android.libraries.matrix.api.room.MessageEventType import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailInfo import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailType +import io.element.android.libraries.matrix.ui.room.canCall import io.element.android.libraries.matrix.ui.room.canRedactOtherAsState import io.element.android.libraries.matrix.ui.room.canRedactOwnAsState import io.element.android.libraries.matrix.ui.room.canSendMessageAsState @@ -158,9 +159,7 @@ class MessagesPresenter @AssistedInject constructor( mutableStateOf(false) } - var canJoinCall by rememberSaveable { - mutableStateOf(false) - } + val canJoinCall by room.canCall(updateKey = syncUpdateFlow.value) LaunchedEffect(Unit) { // Remove the unread flag on entering but don't send read receipts @@ -170,12 +169,6 @@ class MessagesPresenter @AssistedInject constructor( } } - LaunchedEffect(syncUpdateFlow.value) { - withContext(dispatchers.io) { - canJoinCall = room.canUserJoinCall(room.sessionId).getOrDefault(false) - } - } - val inviteProgress = remember { mutableStateOf>(AsyncData.Uninitialized) } var showReinvitePrompt by remember { mutableStateOf(false) } LaunchedEffect(hasDismissedInviteDialog, composerState.hasFocus, syncUpdateFlow.value) { diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 8ef9d3d268..3adc7059b0 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -288,7 +288,7 @@ class MessagesPresenterTest { initialState.eventSink.invoke(MessagesEvents.HandleAction(TimelineItemAction.Reply, aMessageEvent())) val finalState = awaitItem() assertThat(finalState.composerState.mode).isInstanceOf(MessageComposerMode.Reply::class.java) - assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) + assertThat(finalState.actionListState.target).isEqualTo(ActionListState.Target.None) } } @@ -298,10 +298,9 @@ class MessagesPresenterTest { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - skipItems(2) - val initialState = awaitItem() + val initialState = awaitFirstItem() initialState.eventSink.invoke(MessagesEvents.HandleAction(TimelineItemAction.Reply, aMessageEvent(eventId = null))) - assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) + assertThat(initialState.actionListState.target).isEqualTo(ActionListState.Target.None) // Otherwise we would have some extra items here ensureAllEventsConsumed() } @@ -335,7 +334,7 @@ class MessagesPresenterTest { assertThat(finalState.composerState.mode).isInstanceOf(MessageComposerMode.Reply::class.java) val replyMode = finalState.composerState.mode as MessageComposerMode.Reply assertThat(replyMode.attachmentThumbnailInfo).isNotNull() - assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) + assertThat(finalState.actionListState.target).isEqualTo(ActionListState.Target.None) } } @@ -368,7 +367,7 @@ class MessagesPresenterTest { assertThat(finalState.composerState.mode).isInstanceOf(MessageComposerMode.Reply::class.java) val replyMode = finalState.composerState.mode as MessageComposerMode.Reply assertThat(replyMode.attachmentThumbnailInfo).isNotNull() - assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) + assertThat(finalState.actionListState.target).isEqualTo(ActionListState.Target.None) } } @@ -394,7 +393,7 @@ class MessagesPresenterTest { assertThat(finalState.composerState.mode).isInstanceOf(MessageComposerMode.Reply::class.java) val replyMode = finalState.composerState.mode as MessageComposerMode.Reply assertThat(replyMode.attachmentThumbnailInfo).isNotNull() - assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) + assertThat(finalState.actionListState.target).isEqualTo(ActionListState.Target.None) } } @@ -408,7 +407,7 @@ class MessagesPresenterTest { initialState.eventSink.invoke(MessagesEvents.HandleAction(TimelineItemAction.Edit, aMessageEvent())) val finalState = awaitItem() assertThat(finalState.composerState.mode).isInstanceOf(MessageComposerMode.Edit::class.java) - assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) + assertThat(finalState.actionListState.target).isEqualTo(ActionListState.Target.None) } } @@ -732,7 +731,7 @@ class MessagesPresenterTest { assertThat(replyMode.attachmentThumbnailInfo).isNotNull() assertThat(replyMode.attachmentThumbnailInfo?.textContent) .isEqualTo("What type of food should we have at the party?") - assertThat(awaitItem().actionListState.target).isEqualTo(ActionListState.Target.None) + assertThat(finalState.actionListState.target).isEqualTo(ActionListState.Target.None) } } diff --git a/features/roomdetails/impl/build.gradle.kts b/features/roomdetails/impl/build.gradle.kts index 624331f62c..037165e4ee 100644 --- a/features/roomdetails/impl/build.gradle.kts +++ b/features/roomdetails/impl/build.gradle.kts @@ -56,8 +56,9 @@ dependencies { api(projects.libraries.usersearch.api) api(projects.services.apperror.api) implementation(libs.coil.compose) - implementation(projects.features.leaveroom.api) + implementation(projects.features.call) implementation(projects.features.createroom.api) + implementation(projects.features.leaveroom.api) implementation(projects.features.userprofile.shared) implementation(projects.services.analytics.api) implementation(projects.features.poll.api) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt index 239e7dd299..460d3038ac 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt @@ -16,6 +16,7 @@ package io.element.android.features.roomdetails.impl +import android.content.Context import android.os.Parcelable import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -28,6 +29,8 @@ import com.bumble.appyx.navmodel.backstack.operation.push import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode +import io.element.android.features.call.CallType +import io.element.android.features.call.ui.ElementCallActivity import io.element.android.features.poll.api.history.PollHistoryEntryPoint import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint import io.element.android.features.roomdetails.impl.edit.RoomDetailsEditNode @@ -42,10 +45,12 @@ import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode import io.element.android.libraries.core.mimetype.MimeTypes +import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.RoomScope 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.media.MediaSource +import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.mediaviewer.api.local.MediaInfo import io.element.android.libraries.mediaviewer.api.viewer.MediaViewerNode import kotlinx.parcelize.Parcelize @@ -54,7 +59,9 @@ import kotlinx.parcelize.Parcelize class RoomDetailsFlowNode @AssistedInject constructor( @Assisted buildContext: BuildContext, @Assisted plugins: List, + @ApplicationContext private val context: Context, private val pollHistoryEntryPoint: PollHistoryEntryPoint, + private val room: MatrixRoom, ) : BaseFlowNode( backstack = BackStack( initialElement = plugins.filterIsInstance().first().initialElement.toNavTarget(), @@ -129,6 +136,14 @@ class RoomDetailsFlowNode @AssistedInject constructor( override fun openAdminSettings() { backstack.push(NavTarget.AdminSettings) } + + override fun onJoinCall() { + val inputs = CallType.RoomCall( + sessionId = room.sessionId, + roomId = room.roomId, + ) + ElementCallActivity.start(context, inputs) + } } createNode(buildContext, listOf(roomDetailsCallback)) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt index 84658ccc83..80a2d5d5d4 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt @@ -58,6 +58,7 @@ class RoomDetailsNode @AssistedInject constructor( fun openAvatarPreview(name: String, url: String) fun openPollHistory() fun openAdminSettings() + fun onJoinCall() } private val callbacks = plugins() @@ -86,6 +87,10 @@ class RoomDetailsNode @AssistedInject constructor( callbacks.forEach { it.openPollHistory() } } + private fun onJoinCall() { + callbacks.forEach { it.onJoinCall() } + } + private fun CoroutineScope.onShareRoom(context: Context) = launch { room.getPermalink() .onSuccess { permalink -> @@ -162,6 +167,7 @@ class RoomDetailsNode @AssistedInject constructor( openAvatarPreview = ::openAvatarPreview, openPollHistory = ::openPollHistory, openAdminSettings = this::openAdminSettings, + onJoinCallClicked = ::onJoinCall, ) } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index c8b0f49346..5aa7baf0ea 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -44,6 +44,7 @@ import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.powerlevels.canInvite import io.element.android.libraries.matrix.api.room.powerlevels.canSendState import io.element.android.libraries.matrix.api.room.roomNotificationSettings +import io.element.android.libraries.matrix.ui.room.canCall import io.element.android.libraries.matrix.ui.room.getDirectRoomMember import io.element.android.libraries.matrix.ui.room.isOwnUserAdmin import io.element.android.services.analytics.api.AnalyticsService @@ -86,11 +87,14 @@ class RoomDetailsPresenter @Inject constructor( } } + val syncUpdateTimestamp by room.syncUpdateFlow.collectAsState() + val membersState by room.membersStateFlow.collectAsState() val canInvite by getCanInvite(membersState) val canEditName by getCanSendState(membersState, StateEventType.ROOM_NAME) val canEditAvatar by getCanSendState(membersState, StateEventType.ROOM_AVATAR) val canEditTopic by getCanSendState(membersState, StateEventType.ROOM_TOPIC) + val canJoinCall by room.canCall(updateKey = syncUpdateTimestamp) val dmMember by room.getDirectRoomMember(membersState) val roomMemberDetailsPresenter = roomMemberDetailsPresenter(dmMember) val roomType by getRoomType(dmMember) @@ -138,6 +142,7 @@ class RoomDetailsPresenter @Inject constructor( canInvite = canInvite, canEdit = (canEditAvatar || canEditName || canEditTopic) && roomType == RoomDetailsType.Room, canShowNotificationSettings = canShowNotificationSettings.value, + canCall = canJoinCall, roomType = roomType, roomMemberDetailsState = roomMemberDetailsState, leaveRoomState = leaveRoomState, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt index 668add6f1c..51b89b50b5 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt @@ -36,6 +36,7 @@ data class RoomDetailsState( val canEdit: Boolean, val canInvite: Boolean, val canShowNotificationSettings: Boolean, + val canCall: Boolean, val leaveRoomState: LeaveRoomState, val roomNotificationSettings: RoomNotificationSettings?, val isFavorite: Boolean, 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 c2b262ac71..5bfac47f7e 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 @@ -46,6 +46,7 @@ open class RoomDetailsStateProvider : PreviewParameterProvider // Also test the roomNotificationSettings ALL_MESSAGES in the same screenshot. Icon 'Mute' should be displayed roomNotificationSettings = aRoomNotificationSettings(mode = RoomNotificationMode.ALL_MESSAGES, isDefault = true) ), + aRoomDetailsState(canCall = false, canInvite = false), // Add other state here ) } @@ -89,6 +90,7 @@ fun aRoomDetailsState( canInvite: Boolean = false, canEdit: Boolean = false, canShowNotificationSettings: Boolean = true, + canCall: Boolean = true, roomType: RoomDetailsType = RoomDetailsType.Room, roomMemberDetailsState: UserProfileState? = null, leaveRoomState: LeaveRoomState = aLeaveRoomState(), @@ -107,6 +109,7 @@ fun aRoomDetailsState( canInvite = canInvite, canEdit = canEdit, canShowNotificationSettings = canShowNotificationSettings, + canCall = canCall, roomType = roomType, roomMemberDetailsState = roomMemberDetailsState, leaveRoomState = leaveRoomState, 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 5058a38a36..10a9609ff9 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 @@ -27,7 +27,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons @@ -100,6 +99,7 @@ fun RoomDetailsView( openAvatarPreview: (name: String, url: String) -> Unit, openPollHistory: () -> Unit, openAdminSettings: () -> Unit, + onJoinCallClicked: () -> Unit, modifier: Modifier = Modifier, ) { fun onShareMember() { @@ -137,7 +137,9 @@ fun RoomDetailsView( ) MainActionsSection( state = state, - onShareRoom = onShareRoom + onShareRoom = onShareRoom, + onInvitePeople = invitePeople, + onCall = onJoinCallClicked, ) } @@ -188,20 +190,12 @@ fun RoomDetailsView( } val displayMemberListItem = state.roomType is RoomDetailsType.Room - val displayInviteMembersItem = state.canInvite - if (displayMemberListItem || displayInviteMembersItem) { + if (displayMemberListItem) { PreferenceCategory { - if (displayMemberListItem) { - MembersItem( - memberCount = state.memberCount, - openRoomMemberList = openRoomMemberList, - ) - } - if (displayInviteMembersItem) { - InviteItem( - invitePeople = invitePeople - ) - } + MembersItem( + memberCount = state.memberCount, + openRoomMemberList = openRoomMemberList, + ) } } @@ -267,10 +261,12 @@ private fun RoomDetailsTopBar( private fun MainActionsSection( state: RoomDetailsState, onShareRoom: () -> Unit, + onInvitePeople: () -> Unit, + onCall: () -> Unit, ) { Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), + horizontalArrangement = Arrangement.SpaceEvenly, ) { val roomNotificationSettings = state.roomNotificationSettings if (state.canShowNotificationSettings && roomNotificationSettings != null) { @@ -292,9 +288,22 @@ private fun MainActionsSection( ) } } - Spacer(modifier = Modifier.width(20.dp)) + if (state.canCall) { + MainActionButton( + title = stringResource(CommonStrings.action_call), + imageVector = CompoundIcons.VideoCall(), + onClick = onCall, + ) + } + if (state.roomType is RoomDetailsType.Room && state.canInvite) { + MainActionButton( + title = stringResource(CommonStrings.action_invite), + imageVector = CompoundIcons.UserAdd(), + onClick = onInvitePeople, + ) + } MainActionButton( - title = stringResource(R.string.screen_room_details_share_room_title), + title = stringResource(CommonStrings.action_share), imageVector = CompoundIcons.ShareAndroid(), onClick = onShareRoom ) @@ -410,17 +419,6 @@ private fun MembersItem( ) } -@Composable -private fun InviteItem( - invitePeople: () -> Unit, -) { - ListItem( - headlineContent = { Text(stringResource(R.string.screen_room_details_invite_people_title)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.UserAdd())), - onClick = invitePeople, - ) -} - @Composable private fun PollsSection( openPollHistory: () -> Unit, @@ -491,5 +489,6 @@ private fun ContentToPreview(state: RoomDetailsState) { openAvatarPreview = { _, _ -> }, openPollHistory = {}, openAdminSettings = {}, + onJoinCallClicked = {}, ) } diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt index f4e7ef1d60..27317156e2 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt @@ -62,7 +62,7 @@ class RoomDetailsViewTest { rule.setRoomDetailView( onShareRoom = callback, ) - rule.clickOn(R.string.screen_room_details_share_room_title) + rule.clickOn(CommonStrings.action_share) } } @@ -112,9 +112,8 @@ class RoomDetailsViewTest { } } - @Config(qualifiers = "h1024dp") @Test - fun `click on invite people invokes expected callback`() { + fun `click on invite invokes expected callback`() { ensureCalledOnce { callback -> rule.setRoomDetailView( state = aRoomDetailsState( @@ -123,7 +122,21 @@ class RoomDetailsViewTest { ), invitePeople = callback, ) - rule.clickOn(R.string.screen_room_details_invite_people_title) + rule.clickOn(CommonStrings.action_invite) + } + } + + @Test + fun `click on call invokes expected callback`() { + ensureCalledOnce { callback -> + rule.setRoomDetailView( + state = aRoomDetailsState( + eventSink = EventsRecorder(expectEvents = false), + canInvite = true, + ), + onJoinCallClicked = callback, + ) + rule.clickOn(CommonStrings.action_call) } } @@ -258,6 +271,7 @@ private fun AndroidComposeTestRule.setRoomD openAvatarPreview: (name: String, url: String) -> Unit = EnsureNeverCalledWithTwoParams(), openPollHistory: () -> Unit = EnsureNeverCalled(), openAdminSettings: () -> Unit = EnsureNeverCalled(), + onJoinCallClicked: () -> Unit = EnsureNeverCalled(), ) { setContent { RoomDetailsView( @@ -272,6 +286,7 @@ private fun AndroidComposeTestRule.setRoomD openAvatarPreview = openAvatarPreview, openPollHistory = openPollHistory, openAdminSettings = openAdminSettings, + onJoinCallClicked = onJoinCallClicked, ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt index bc530b8fd3..a1172b47fa 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt @@ -24,6 +24,7 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn import androidx.compose.material.ripple.rememberRipple import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme @@ -53,12 +54,14 @@ fun MainActionButton( val ripple = rememberRipple(bounded = false) val interactionSource = remember { MutableInteractionSource() } Column( - modifier.clickable( - enabled = enabled, - interactionSource = interactionSource, - onClick = onClick, - indication = ripple - ), + modifier + .clickable( + enabled = enabled, + interactionSource = interactionSource, + onClick = onClick, + indication = ripple + ) + .widthIn(min = 76.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { val tintColor = if (enabled) LocalContentColor.current else MaterialTheme.colorScheme.secondary diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/MatrixRoomState.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/MatrixRoomState.kt index 4a80709d42..aa3121146a 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/MatrixRoomState.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/MatrixRoomState.kt @@ -49,6 +49,13 @@ fun MatrixRoom.canRedactOtherAsState(updateKey: Long): State { } } +@Composable +fun MatrixRoom.canCall(updateKey: Long): State { + return produceState(initialValue = false, key1 = updateKey) { + value = canUserJoinCall(sessionId).getOrElse { false } + } +} + @Composable fun MatrixRoom.isOwnUserAdmin(): Boolean { val roomInfo by roomInfoFlow.collectAsState(initial = null) diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index cede56abc3..4f88ddc05c 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -34,6 +34,7 @@ "Accept" "Add to timeline" "Back" + "Call" "Cancel" "Choose photo" "Clear" diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png index a9aa413768..0aa6af6ee6 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe5642aa6804a99d9b3505bb63fe0c328015592f35e095415c910d9a5abfa052 -size 47238 +oid sha256:ba1133eb6569d4821b12fe56c3347a472bd95ad5b269546fed57f249e365d432 +size 47379 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png index 06dcb0c6f8..47ed3e0c55 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7465cc5ca6b9f49ab4ac1a529fc2ee21547afb85a231d74491df6b2a2781bd18 -size 33075 +oid sha256:d0f46ff6cfe976d3d96ecbf323fcf2ed2ed57c326c3bed3c450c30e851442567 +size 33239 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_10,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ac8b4f88da --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_10,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3a1bc43adac954bc9ab1b9b9d69814e376d2f2a41006b8126acdeb19bb93df7 +size 44471 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png index 13b74220ae..2d3b01d016 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93d4eb6dce460237fe6650e965b901c28b020057907867ac9f73665032a85f88 -size 35427 +oid sha256:84dcef17832aad71a9bf0505346731b27f882795d9bf75b194b647dfad40eca2 +size 35595 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png index 1253286deb..a913fd1e41 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8a655fb4e64fa300c6169d332fa894b6bb215a9acd09c0fbe876c7430f3ae1d -size 34786 +oid sha256:72b731453adaad784d3c037c06defd7b24939435ab54ee47a693f6aabcc0dce7 +size 34928 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png index ba3922dabf..315ccc031d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4329c322042bc8489177886e37f6d3a876cbfee8a8a73e3aae6414a17e92ad67 -size 42330 +oid sha256:c675a4d9422ba2d73e860420e25f10a21c899b33e780a4f61a41f71921f3078a +size 42471 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png index 265ed3a00e..3e5b34bb68 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8359c8e69df44350b30b5aaf9ad99ace52fe378ba6db2cfd86a4deb35aa3abd1 -size 46347 +oid sha256:78a182e17a2ef55a4d7dbcb4ad952d5f06f12044da4dc3578a5cd3cb7b7d34a1 +size 45723 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png index 6bcd031f28..e8fc878d37 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8659b897a22fd88915a8df3de3f0ba8d6775057f51b1c5cd1db83b0e58497576 -size 44394 +oid sha256:ccf59aaaba1ebbf35518840ba069f2ea587c5f5590ed1f0be5904922d10321e0 +size 44535 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png index 211b17e145..528460a99a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a195980dff4ad4343eec99438a35ab655abd124346f5e4d66011c3c1736938e -size 44589 +oid sha256:972414b2900a7b2fddc7c45640f0718bbed3ff799067a0dde4f9e3f2fb70266a +size 44574 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png index b377d61fc3..8674de33ba 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:29abf008345cd7c7150a64b17c6bd1c0af06c8d960c5e91a2cf0e4b1c0365954 -size 48791 +oid sha256:f89ab41056584b086cf6fbeabff68cee7ee7dde4d52fcef9849dcdc296c69a1e +size 48983 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png index c359f319de..3fe4f5ea55 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6228ac8af567a9d4fc402d2b14ff65315f6cfca2d02407664b0db00df5fa68e -size 34363 +oid sha256:d3dead46255af9a750e9afe09f2e5201a4f12adea8f2e1a3d0806062775e3ea0 +size 34587 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_10,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5f4f2473e5 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_10,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52ded1bfd8ff7a95041172bdca31be2a869f5e2b81f1b181f0ece14ffdf4c7aa +size 45708 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png index ffce2cd625..a9bcccc16c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3987ef26780da018bedbe05b1af43c3a9c3f31963aff1eb17833a284118d29ec -size 36951 +oid sha256:82107faba76f5c6cc992ec47d6e4d765761743094fcae65c5ed948fce3cf1f05 +size 37183 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png index 65597d5fb9..ace749a573 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c74c580b51aaa480a1ca15f2f33e3e6acb9e2a5581d5501ff67b6c4b56d92099 -size 35582 +oid sha256:73a016fc3d40517042f8d231ab682d71e477843195fbe4e080cd62fc12e8b954 +size 35778 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png index 4e26b62c8b..d6cd988f6a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d81c82c5d5f07bb57911488e18e2cf0867009233ad678557a8ead13e6827ba2b -size 43640 +oid sha256:b9250d7927307d397b969e0803ed9965a7ae301347446fef264004d690d064f6 +size 43826 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png index b708fb2592..fb7e2778dc 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdfe3fb1c1594335fda27a62f2c1b4740815778248ba76923a2184937db02144 -size 47743 +oid sha256:fd42eba5e0daa676298cfb2813d595083e8abd1c5abf8dfb416910fbbc2ea02c +size 47128 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png index ee4cb47b6f..5c7801f83c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d23cfed590306aec6eb92664c616e38f18e54274bb381e2e044e22916e8b1129 -size 45723 +oid sha256:58cdd2ba7d10769a29ad59fa2cff7c972767d01352d656a06bfcb922522980b3 +size 45918 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png index 3f2e702024..9945d7f6f0 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33e9d17227fda64a35cd885d029b70bab0088d5748cc5440c32d1cfa0a3bbf52 -size 45908 +oid sha256:43d176f6e953006f72b09ba374f95c28388f10ce600c9d495761c4c11ccc109b +size 45874 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_MainActionButton_null_Buttons_MainActionButton_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_MainActionButton_null_Buttons_MainActionButton_0_null,NEXUS_5,1.0,en].png index 5f0958761f..503e621882 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_MainActionButton_null_Buttons_MainActionButton_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.button_MainActionButton_null_Buttons_MainActionButton_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a4cd869d7be5ebd07dc72947fe36f6d601fa55494bb4f7c75b828d1569d983a -size 15105 +oid sha256:9c5d638b74379f27b9774309848b4cb068514faa856f5882f8f0f8614ecaad12 +size 15712 From 0bbb107dea5f366967f3b7d1dc0e989bae81d8a0 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Wed, 8 May 2024 12:49:44 +0200 Subject: [PATCH 275/289] UX cleanup: DM details screen (#2817) * UX cleanup: DM details screen Reuse `MainActionsSection` for DMs too, hiding the Share CTA in that case. * Update screenshots * Fix tests --------- Co-authored-by: ElementBot --- .../roomdetails/impl/RoomDetailsView.kt | 29 ++++++++++++------- .../roomdetails/impl/RoomDetailsViewTest.kt | 13 --------- .../shared/UserProfileMainActionsSection.kt | 7 ++++- ...etailsDark--1_3_null_5,NEXUS_5,1.0,en].png | 4 +-- ...etailsDark--1_3_null_6,NEXUS_5,1.0,en].png | 4 +-- ...oomDetails--0_2_null_5,NEXUS_5,1.0,en].png | 4 +-- ...oomDetails--0_2_null_6,NEXUS_5,1.0,en].png | 4 +-- 7 files changed, 32 insertions(+), 33 deletions(-) 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 10a9609ff9..6c6a194a88 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 @@ -49,7 +49,6 @@ import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.leaveroom.api.LeaveRoomView import io.element.android.features.userprofile.shared.UserProfileHeaderSection -import io.element.android.features.userprofile.shared.UserProfileMainActionsSection import io.element.android.features.userprofile.shared.blockuser.BlockUserDialogs import io.element.android.features.userprofile.shared.blockuser.BlockUserSection import io.element.android.libraries.architecture.coverage.ExcludeFromCoverage @@ -153,7 +152,12 @@ fun RoomDetailsView( openAvatarPreview(member.getBestName(), avatarUrl) }, ) - UserProfileMainActionsSection(onShareUser = ::onShareMember) + MainActionsSection( + state = state, + onShareRoom = onShareRoom, + onInvitePeople = invitePeople, + onCall = onJoinCallClicked, + ) } } Spacer(Modifier.height(18.dp)) @@ -295,18 +299,21 @@ private fun MainActionsSection( onClick = onCall, ) } - if (state.roomType is RoomDetailsType.Room && state.canInvite) { + if (state.roomType is RoomDetailsType.Room) { + if (state.canInvite) { + MainActionButton( + title = stringResource(CommonStrings.action_invite), + imageVector = CompoundIcons.UserAdd(), + onClick = onInvitePeople, + ) + } + // Share CTA should be hidden for DMs MainActionButton( - title = stringResource(CommonStrings.action_invite), - imageVector = CompoundIcons.UserAdd(), - onClick = onInvitePeople, + title = stringResource(CommonStrings.action_share), + imageVector = CompoundIcons.ShareAndroid(), + onClick = onShareRoom ) } - MainActionButton( - title = stringResource(CommonStrings.action_share), - imageVector = CompoundIcons.ShareAndroid(), - onClick = onShareRoom - ) } } diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt index 27317156e2..802f08c344 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt @@ -66,19 +66,6 @@ class RoomDetailsViewTest { } } - @Test - fun `click on share member invokes expected callback`() { - val state = aDmRoomDetailsState() - val roomMember = (state.roomType as RoomDetailsType.Dm).roomMember - ensureCalledOnceWithParam(roomMember) { callback -> - rule.setRoomDetailView( - state = aDmRoomDetailsState(), - onShareMember = callback, - ) - rule.clickOn(CommonStrings.action_share) - } - } - @Config(qualifiers = "h1024dp") @Test fun `click on room members invokes expected callback`() { diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt index bedcc2160c..ec27a18dcd 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt @@ -19,16 +19,21 @@ package io.element.android.features.userprofile.shared import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.components.button.MainActionButton import io.element.android.libraries.ui.strings.CommonStrings @Composable fun UserProfileMainActionsSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) { - Row(modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) { + Row( + modifier.fillMaxWidth().padding(horizontal = 16.dp), + horizontalArrangement = Arrangement.SpaceEvenly, + ) { MainActionButton( title = stringResource(CommonStrings.action_share), imageVector = CompoundIcons.ShareAndroid(), diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png index 237efc2b36..fdebce0be9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92e67efa400e387c6eaab1933b763d01a711030ec582c9bb01d6b75f925db660 -size 42570 +oid sha256:0e1a3a63380ed457edaf6c5e992238647724e1f6e64e0d0693b279b7e93c8be9 +size 43338 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png index 237efc2b36..fdebce0be9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92e67efa400e387c6eaab1933b763d01a711030ec582c9bb01d6b75f925db660 -size 42570 +oid sha256:0e1a3a63380ed457edaf6c5e992238647724e1f6e64e0d0693b279b7e93c8be9 +size 43338 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png index 91e6ec637d..961d0de098 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:883e53d8ad2f6da6e3002274d5d808081e89242b43ec398d1366e986b7329d71 -size 43849 +oid sha256:6aacd02b8bc6b9cd63bfd7e49e2f1feacdee4290495905246b81d29622f1ef6b +size 44611 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png index 91e6ec637d..961d0de098 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:883e53d8ad2f6da6e3002274d5d808081e89242b43ec398d1366e986b7329d71 -size 43849 +oid sha256:6aacd02b8bc6b9cd63bfd7e49e2f1feacdee4290495905246b81d29622f1ef6b +size 44611 From 5dddda64d1656ace3d9873541f844d17b1b33ce2 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Wed, 8 May 2024 16:05:02 +0200 Subject: [PATCH 276/289] UX cleanup: DM details screen (#2820) * UX cleanup: user profile. - Move send DM to a CTA button. - Add 'Call' CTA button too when there is a DM with that user and a call is possible. - Add missing tests. * Update screenshots * Add tests for clicking on the avatar --------- Co-authored-by: ElementBot --- changelog.d/2818.misc | 1 + .../roomdetails/impl/RoomDetailsFlowNode.kt | 4 + .../members/details/RoomMemberDetailsNode.kt | 7 +- .../details/RoomMemberDetailsPresenter.kt | 7 +- .../RoomMemberDetailsPresenterTests.kt | 2 + features/userprofile/impl/build.gradle.kts | 1 + .../userprofile/impl/UserProfileFlowNode.kt | 11 + .../userprofile/impl/root/UserProfileNode.kt | 3 +- .../impl/root/UserProfilePresenter.kt | 4 + .../impl/UserProfilePresenterTests.kt | 2 + .../shared/UserProfileHeaderSection.kt | 8 +- .../shared/UserProfileMainActionsSection.kt | 23 +- .../shared/UserProfileNodeHelper.kt | 1 + .../shared/UserProfilePresenterHelper.kt | 23 ++ .../userprofile/shared/UserProfileState.kt | 2 + .../shared/UserProfileStateProvider.kt | 6 + .../userprofile/shared/UserProfileView.kt | 37 ++- .../userprofile/UserProfileViewTest.kt | 235 ++++++++++++++++++ .../src/main/res/values/localazy.xml | 1 + .../tests/testutils/EnsureCalledOnce.kt | 6 + ...ileView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 4 +- ...ileView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 4 +- ...ileView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 +- ...ileView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 4 +- ...ileView-Day-0_1_null_4,NEXUS_5,1.0,en].png | 4 +- ...ileView-Day-0_1_null_5,NEXUS_5,1.0,en].png | 4 +- ...ileView-Day-0_1_null_6,NEXUS_5,1.0,en].png | 4 +- ...ileView-Day-0_1_null_7,NEXUS_5,1.0,en].png | 3 + ...ileView-Day-0_1_null_8,NEXUS_5,1.0,en].png | 3 + ...eView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 4 +- ...eView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 4 +- ...eView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 +- ...eView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 4 +- ...eView-Night-0_2_null_4,NEXUS_5,1.0,en].png | 4 +- ...eView-Night-0_2_null_5,NEXUS_5,1.0,en].png | 4 +- ...eView-Night-0_2_null_6,NEXUS_5,1.0,en].png | 4 +- ...eView-Night-0_2_null_7,NEXUS_5,1.0,en].png | 3 + ...eView-Night-0_2_null_8,NEXUS_5,1.0,en].png | 3 + 38 files changed, 396 insertions(+), 56 deletions(-) create mode 100644 changelog.d/2818.misc create mode 100644 features/userprofile/shared/src/test/kotlin/io/element/android/features/userprofile/UserProfileViewTest.kt create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_8,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_8,NEXUS_5,1.0,en].png diff --git a/changelog.d/2818.misc b/changelog.d/2818.misc new file mode 100644 index 0000000000..6146c2ca82 --- /dev/null +++ b/changelog.d/2818.misc @@ -0,0 +1 @@ +UX cleanup: user profile. Move send DM to a call to action button, add 'Call' CTA too. diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt index 460d3038ac..798a903274 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt @@ -188,6 +188,10 @@ class RoomDetailsFlowNode @AssistedInject constructor( override fun onStartDM(roomId: RoomId) { plugins().forEach { it.onOpenRoom(roomId) } } + + override fun onStartCall(roomId: RoomId) { + ElementCallActivity.start(context, CallType.RoomCall(roomId = roomId, sessionId = room.sessionId)) + } } val plugins = listOf(RoomMemberDetailsNode.RoomMemberDetailsInput(navTarget.roomMemberId), callback) createNode(buildContext, plugins) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt index 14ab79df4c..caccbc97be 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt @@ -76,6 +76,10 @@ class RoomMemberDetailsNode @AssistedInject constructor( callback.onStartDM(roomId) } + fun onStartCall(roomId: RoomId) { + callback.onStartCall(roomId) + } + val state = presenter.present() LaunchedEffect(state.startDmActionState) { @@ -89,7 +93,8 @@ class RoomMemberDetailsNode @AssistedInject constructor( modifier = modifier, goBack = this::navigateUp, onShareUser = ::onShareUser, - onDMStarted = ::onStartDM, + onDmStarted = ::onStartDM, + onStartCall = ::onStartCall, openAvatarPreview = callback::openAvatarPreview, ) } 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 4ac9da2e19..78dcea4c6d 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 @@ -71,6 +71,9 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( var userProfile by remember { mutableStateOf(null) } val startDmActionState: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } val isBlocked: MutableState> = remember { mutableStateOf(AsyncData.Uninitialized) } + val isCurrentUser = remember { client.isMe(roomMemberId) } + val dmRoomId by userProfilePresenterHelper.getDmRoomId() + val canCall by userProfilePresenterHelper.getCanCall(dmRoomId) LaunchedEffect(Unit) { client.ignoredUsersFlow .map { ignoredUsers -> roomMemberId in ignoredUsers } @@ -158,7 +161,9 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( isBlocked = isBlocked.value, startDmActionState = startDmActionState.value, displayConfirmationDialog = confirmationDialog, - isCurrentUser = client.isMe(roomMemberId), + isCurrentUser = isCurrentUser, + dmRoomId = dmRoomId, + canCall = canCall, eventSink = ::handleEvents ) } diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt index c615ba3da9..89b7335fef 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/details/RoomMemberDetailsPresenterTests.kt @@ -70,6 +70,8 @@ class RoomMemberDetailsPresenterTests { assertThat(initialState.userName).isEqualTo(roomMember.displayName) assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl) assertThat(initialState.isBlocked).isEqualTo(AsyncData.Success(roomMember.isIgnored)) + assertThat(initialState.dmRoomId).isEqualTo(A_ROOM_ID) + assertThat(initialState.canCall).isFalse() skipItems(1) val loadedState = awaitItem() assertThat(loadedState.userName).isEqualTo("A custom name") diff --git a/features/userprofile/impl/build.gradle.kts b/features/userprofile/impl/build.gradle.kts index 11a2cd867b..e41524abb2 100644 --- a/features/userprofile/impl/build.gradle.kts +++ b/features/userprofile/impl/build.gradle.kts @@ -46,6 +46,7 @@ dependencies { implementation(projects.libraries.uiStrings) implementation(projects.libraries.androidutils) implementation(projects.libraries.mediaviewer.api) + implementation(projects.features.call) api(projects.features.userprofile.api) api(projects.features.userprofile.shared) implementation(libs.coil.compose) diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt index 43402fa015..402e07dbba 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt @@ -16,6 +16,7 @@ package io.element.android.features.userprofile.impl +import android.content.Context import android.os.Parcelable import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -28,6 +29,8 @@ import com.bumble.appyx.navmodel.backstack.operation.push import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode +import io.element.android.features.call.CallType +import io.element.android.features.call.ui.ElementCallActivity import io.element.android.features.userprofile.api.UserProfileEntryPoint import io.element.android.features.userprofile.impl.root.UserProfileNode import io.element.android.features.userprofile.shared.UserProfileNodeHelper @@ -37,9 +40,11 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs import io.element.android.libraries.core.mimetype.MimeTypes +import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.media.MediaSource +import io.element.android.libraries.matrix.api.user.CurrentSessionIdHolder import io.element.android.libraries.mediaviewer.api.local.MediaInfo import io.element.android.libraries.mediaviewer.api.viewer.MediaViewerNode import kotlinx.parcelize.Parcelize @@ -48,6 +53,8 @@ import kotlinx.parcelize.Parcelize class UserProfileFlowNode @AssistedInject constructor( @Assisted buildContext: BuildContext, @Assisted plugins: List, + @ApplicationContext private val context: Context, + private val sessionIdHolder: CurrentSessionIdHolder, ) : BaseFlowNode( backstack = BackStack( initialElement = NavTarget.Root, @@ -75,6 +82,10 @@ class UserProfileFlowNode @AssistedInject constructor( override fun onStartDM(roomId: RoomId) { plugins().forEach { it.onOpenRoom(roomId) } } + + override fun onStartCall(roomId: RoomId) { + ElementCallActivity.start(context, CallType.RoomCall(sessionId = sessionIdHolder.current, roomId = roomId)) + } } val params = UserProfileNode.UserProfileInputs(userId = inputs().userId) createNode(buildContext, listOf(callback, params)) diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt index 9e1dc5e873..4d4ea993c4 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt @@ -89,7 +89,8 @@ class UserProfileNode @AssistedInject constructor( modifier = modifier, goBack = this::navigateUp, onShareUser = ::onShareUser, - onDMStarted = ::onStartDM, + onDmStarted = ::onStartDM, + onStartCall = callback::onStartCall, openAvatarPreview = callback::openAvatarPreview, ) } 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 fdd2038c7f..753891156e 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 @@ -66,6 +66,8 @@ class UserProfilePresenter @AssistedInject constructor( var userProfile by remember { mutableStateOf(null) } val startDmActionState: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } val isBlocked: MutableState> = remember { mutableStateOf(AsyncData.Uninitialized) } + val dmRoomId by userProfilePresenterHelper.getDmRoomId() + val canCall by userProfilePresenterHelper.getCanCall(dmRoomId) LaunchedEffect(Unit) { client.ignoredUsersFlow .map { ignoredUsers -> userId in ignoredUsers } @@ -118,6 +120,8 @@ class UserProfilePresenter @AssistedInject constructor( startDmActionState = startDmActionState.value, displayConfirmationDialog = confirmationDialog, isCurrentUser = client.isMe(userId), + dmRoomId = dmRoomId, + canCall = canCall, eventSink = ::handleEvents ) } diff --git a/features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/UserProfilePresenterTests.kt b/features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/UserProfilePresenterTests.kt index f0d5955ce9..20b63ef702 100644 --- a/features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/UserProfilePresenterTests.kt +++ b/features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/UserProfilePresenterTests.kt @@ -64,6 +64,8 @@ class UserProfilePresenterTests { assertThat(initialState.userName).isEqualTo(matrixUser.displayName) assertThat(initialState.avatarUrl).isEqualTo(matrixUser.avatarUrl) assertThat(initialState.isBlocked).isEqualTo(AsyncData.Success(false)) + assertThat(initialState.dmRoomId).isEqualTo(A_ROOM_ID) + assertThat(initialState.canCall).isFalse() } } 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 23241bbcc2..9db6aee2b9 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 @@ -49,7 +49,12 @@ fun UserProfileHeaderSection( openAvatarPreview: (url: String) -> Unit, modifier: Modifier = Modifier ) { - Column(modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { + Column( + modifier = modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { Box(modifier = Modifier.size(70.dp)) { Avatar( avatarData = AvatarData(userId.value, userName, avatarUrl, AvatarSize.UserHeader), @@ -65,6 +70,7 @@ fun UserProfileHeaderSection( modifier = Modifier.clipToBounds(), text = userName, style = ElementTheme.typography.fontHeadingLgBold, + textAlign = TextAlign.Center, ) Spacer(modifier = Modifier.height(6.dp)) } diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt index ec27a18dcd..d194a5662a 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileMainActionsSection.kt @@ -29,11 +29,32 @@ import io.element.android.libraries.designsystem.components.button.MainActionBut import io.element.android.libraries.ui.strings.CommonStrings @Composable -fun UserProfileMainActionsSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) { +fun UserProfileMainActionsSection( + isCurrentUser: Boolean, + canCall: Boolean, + onShareUser: () -> Unit, + onStartDM: () -> Unit, + onCall: () -> Unit, + modifier: Modifier = Modifier +) { Row( modifier.fillMaxWidth().padding(horizontal = 16.dp), horizontalArrangement = Arrangement.SpaceEvenly, ) { + if (!isCurrentUser) { + MainActionButton( + title = stringResource(CommonStrings.action_message), + imageVector = CompoundIcons.Chat(), + onClick = onStartDM, + ) + } + if (canCall) { + MainActionButton( + title = stringResource(CommonStrings.action_call), + imageVector = CompoundIcons.VideoCall(), + onClick = onCall, + ) + } MainActionButton( title = stringResource(CommonStrings.action_share), imageVector = CompoundIcons.ShareAndroid(), diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileNodeHelper.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileNodeHelper.kt index 60afcae25b..7a669772f7 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileNodeHelper.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileNodeHelper.kt @@ -32,6 +32,7 @@ class UserProfileNodeHelper( interface Callback : NodeInputs { fun openAvatarPreview(username: String, avatarUrl: String) fun onStartDM(roomId: RoomId) + fun onStartCall(roomId: RoomId) } fun onShareUser( diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfilePresenterHelper.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfilePresenterHelper.kt index df40a35432..af2311aab7 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfilePresenterHelper.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfilePresenterHelper.kt @@ -16,9 +16,14 @@ package io.element.android.features.userprofile.shared +import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState +import androidx.compose.runtime.State +import androidx.compose.runtime.produceState import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -27,6 +32,24 @@ class UserProfilePresenterHelper( private val userId: UserId, private val client: MatrixClient, ) { + @Composable + fun getDmRoomId(): State { + return produceState(initialValue = null) { + value = client.findDM(userId) + } + } + + @Composable + fun getCanCall(roomId: RoomId?): State { + return produceState(initialValue = false, roomId) { + value = if (client.isMe(userId)) { + false + } else { + roomId?.let { client.getRoom(it)?.canUserJoinCall(client.sessionId)?.getOrNull() == true }.orFalse() + } + } + } + fun blockUser( scope: CoroutineScope, isBlockedState: MutableState>, diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileState.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileState.kt index e36edd36c0..bdf4578172 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileState.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileState.kt @@ -29,6 +29,8 @@ data class UserProfileState( val startDmActionState: AsyncAction, val displayConfirmationDialog: ConfirmationDialog?, val isCurrentUser: Boolean, + val dmRoomId: RoomId?, + val canCall: Boolean, val eventSink: (UserProfileEvents) -> Unit ) { enum class ConfirmationDialog { 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 8892c60851..14b5d29878 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 @@ -32,6 +32,8 @@ open class UserProfileStateProvider : PreviewParameterProvider aUserProfileState(displayConfirmationDialog = UserProfileState.ConfirmationDialog.Unblock), aUserProfileState(isBlocked = AsyncData.Loading(true)), aUserProfileState(startDmActionState = AsyncAction.Loading), + aUserProfileState(canCall = true), + aUserProfileState(dmRoomId = null), // Add other states here ) } @@ -44,6 +46,8 @@ fun aUserProfileState( startDmActionState: AsyncAction = AsyncAction.Uninitialized, displayConfirmationDialog: UserProfileState.ConfirmationDialog? = null, isCurrentUser: Boolean = false, + dmRoomId: RoomId? = null, + canCall: Boolean = false, eventSink: (UserProfileEvents) -> Unit = {}, ) = UserProfileState( userId = userId, @@ -53,5 +57,7 @@ fun aUserProfileState( startDmActionState = startDmActionState, displayConfirmationDialog = displayConfirmationDialog, isCurrentUser = isCurrentUser, + dmRoomId = dmRoomId, + canCall = canCall, 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 fcc1f1debc..3d5ae4a66c 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 @@ -16,6 +16,7 @@ package io.element.android.features.userprofile.shared +import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.consumeWindowInsets @@ -29,20 +30,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.userprofile.shared.blockuser.BlockUserDialogs import io.element.android.features.userprofile.shared.blockuser.BlockUserSection import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults import io.element.android.libraries.designsystem.components.button.BackButton -import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.components.IconSource -import io.element.android.libraries.designsystem.theme.components.ListItem -import io.element.android.libraries.designsystem.theme.components.ListItemStyle import io.element.android.libraries.designsystem.theme.components.Scaffold -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.core.RoomId import io.element.android.libraries.ui.strings.CommonStrings @@ -52,11 +47,13 @@ import io.element.android.libraries.ui.strings.CommonStrings fun UserProfileView( state: UserProfileState, onShareUser: () -> Unit, - onDMStarted: (RoomId) -> Unit, + onDmStarted: (RoomId) -> Unit, + onStartCall: (RoomId) -> Unit, goBack: () -> Unit, openAvatarPreview: (username: String, url: String) -> Unit, modifier: Modifier = Modifier, ) { + BackHandler { goBack() } Scaffold( modifier = modifier, topBar = { @@ -78,12 +75,17 @@ fun UserProfileView( }, ) - UserProfileMainActionsSection(onShareUser = onShareUser) + UserProfileMainActionsSection( + isCurrentUser = state.isCurrentUser, + canCall = state.canCall, + onShareUser = onShareUser, + onStartDM = { state.eventSink(UserProfileEvents.StartDM) }, + onCall = { state.dmRoomId?.let { onStartCall(it) } } + ) Spacer(modifier = Modifier.height(26.dp)) if (!state.isCurrentUser) { - StartDMSection(onStartDMClicked = { state.eventSink(UserProfileEvents.StartDM) }) BlockUserSection(state) BlockUserDialogs(state) } @@ -94,7 +96,7 @@ fun UserProfileView( progressText = stringResource(CommonStrings.common_starting_chat), ) }, - onSuccess = onDMStarted, + onSuccess = onDmStarted, errorMessage = { stringResource(R.string.screen_start_chat_error_starting_chat) }, onRetry = { state.eventSink(UserProfileEvents.StartDM) }, onErrorDismiss = { state.eventSink(UserProfileEvents.ClearStartDMState) }, @@ -103,18 +105,6 @@ fun UserProfileView( } } -@Composable -private fun StartDMSection( - onStartDMClicked: () -> Unit, -) { - ListItem( - headlineContent = { Text(stringResource(CommonStrings.common_direct_chat)) }, - leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Chat())), - style = ListItemStyle.Primary, - onClick = onStartDMClicked, - ) -} - @PreviewsDayNight @Composable internal fun UserProfileViewPreview( @@ -124,7 +114,8 @@ internal fun UserProfileViewPreview( state = state, onShareUser = {}, goBack = {}, - onDMStarted = {}, + onDmStarted = {}, + onStartCall = {}, openAvatarPreview = { _, _ -> } ) } diff --git a/features/userprofile/shared/src/test/kotlin/io/element/android/features/userprofile/UserProfileViewTest.kt b/features/userprofile/shared/src/test/kotlin/io/element/android/features/userprofile/UserProfileViewTest.kt new file mode 100644 index 0000000000..6cc5e229e5 --- /dev/null +++ b/features/userprofile/shared/src/test/kotlin/io/element/android/features/userprofile/UserProfileViewTest.kt @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.userprofile + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.hasTestTag +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.userprofile.shared.R +import io.element.android.features.userprofile.shared.UserProfileEvents +import io.element.android.features.userprofile.shared.UserProfileState +import io.element.android.features.userprofile.shared.UserProfileView +import io.element.android.features.userprofile.shared.aUserProfileState +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.test.AN_AVATAR_URL +import io.element.android.libraries.matrix.test.A_ROOM_ID +import io.element.android.libraries.matrix.test.A_USER_NAME +import io.element.android.libraries.testtags.TestTags +import io.element.android.libraries.ui.strings.CommonStrings +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EnsureNeverCalledWithParam +import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import io.element.android.tests.testutils.ensureCalledOnceWithParam +import io.element.android.tests.testutils.ensureCalledOnceWithTwoParams +import io.element.android.tests.testutils.pressBack +import io.element.android.tests.testutils.pressBackKey +import kotlinx.coroutines.test.runTest +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class UserProfileViewTest { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `on back key press - the expected callback is called`() = runTest { + ensureCalledOnce { callback -> + rule.setUserProfileView( + goBack = callback, + ) + rule.pressBackKey() + } + } + + @Test + fun `on back button click - the expected callback is called`() = runTest { + ensureCalledOnce { callback -> + rule.setUserProfileView( + goBack = callback, + ) + rule.pressBack() + } + } + + @Test + fun `on avatar clicked - the expected callback is called`() = runTest { + ensureCalledOnceWithTwoParams(A_USER_NAME, AN_AVATAR_URL) { callback -> + rule.setUserProfileView( + state = aUserProfileState(userName = A_USER_NAME, avatarUrl = AN_AVATAR_URL), + openAvatarPreview = callback, + ) + rule.onNode(hasTestTag(TestTags.memberDetailAvatar.value)).performClick() + } + } + + @Test + fun `on avatar clicked with no avatar - nothing happens`() = runTest { + val callback = EnsureNeverCalledWithTwoParams() + rule.setUserProfileView( + state = aUserProfileState(userName = A_USER_NAME, avatarUrl = null), + openAvatarPreview = callback, + ) + rule.onNode(hasTestTag(TestTags.memberDetailAvatar.value)).performClick() + } + + @Test + fun `on Share clicked - the expected callback is called`() = runTest { + ensureCalledOnce { callback -> + rule.setUserProfileView( + onShareUser = callback, + ) + rule.clickOn(CommonStrings.action_share) + } + } + + @Test + fun `on Message clicked - the StartDm event is emitted`() = runTest { + val eventsRecorder = EventsRecorder() + rule.setUserProfileView( + state = aUserProfileState( + dmRoomId = A_ROOM_ID, + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_message) + eventsRecorder.assertSingle(UserProfileEvents.StartDM) + } + + @Test + fun `on Call clicked - the expected callback is called`() = runTest { + ensureCalledOnceWithParam(A_ROOM_ID) { callback -> + rule.setUserProfileView( + state = aUserProfileState( + dmRoomId = A_ROOM_ID, + canCall = true, + ), + onStartCall = callback, + ) + rule.clickOn(CommonStrings.action_call) + } + } + + @Test + fun `on Block user clicked - a BlockUser event is emitted with needsConfirmation`() = runTest { + val eventsRecorder = EventsRecorder() + rule.setUserProfileView( + state = aUserProfileState( + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_dm_details_block_user) + eventsRecorder.assertSingle(UserProfileEvents.BlockUser(needsConfirmation = true)) + } + + @Test + fun `on confirming block user - a BlockUser event is emitted without needsConfirmation`() = runTest { + val eventsRecorder = EventsRecorder() + rule.setUserProfileView( + state = aUserProfileState( + displayConfirmationDialog = UserProfileState.ConfirmationDialog.Block, + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_dm_details_block_alert_action) + eventsRecorder.assertSingle(UserProfileEvents.BlockUser(needsConfirmation = false)) + } + + @Test + fun `on canceling blocking a user - a ClearConfirmationDialog event is emitted`() = runTest { + val eventsRecorder = EventsRecorder() + rule.setUserProfileView( + state = aUserProfileState( + displayConfirmationDialog = UserProfileState.ConfirmationDialog.Block, + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_cancel) + eventsRecorder.assertSingle(UserProfileEvents.ClearConfirmationDialog) + } + + @Test + fun `on Unblock user clicked - an UnblockUser event is emitted with needsConfirmation`() = runTest { + val eventsRecorder = EventsRecorder() + rule.setUserProfileView( + state = aUserProfileState( + isBlocked = AsyncData.Success(true), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_dm_details_unblock_user) + eventsRecorder.assertSingle(UserProfileEvents.UnblockUser(needsConfirmation = true)) + } + + @Test + fun `on confirming Unblock user - an UnblockUser event is emitted without needsConfirmation`() = runTest { + val eventsRecorder = EventsRecorder() + rule.setUserProfileView( + state = aUserProfileState( + isBlocked = AsyncData.Success(true), + displayConfirmationDialog = UserProfileState.ConfirmationDialog.Unblock, + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_dm_details_unblock_alert_action) + eventsRecorder.assertSingle(UserProfileEvents.UnblockUser(needsConfirmation = false)) + } + + @Test + fun `on canceling unblocking a user - a ClearConfirmationDialog event is emitted`() = runTest { + val eventsRecorder = EventsRecorder() + rule.setUserProfileView( + state = aUserProfileState( + isBlocked = AsyncData.Success(true), + displayConfirmationDialog = UserProfileState.ConfirmationDialog.Unblock, + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_cancel) + eventsRecorder.assertSingle(UserProfileEvents.ClearConfirmationDialog) + } +} + +private fun AndroidComposeTestRule.setUserProfileView( + state: UserProfileState = aUserProfileState( + eventSink = EventsRecorder(expectEvents = false), + ), + onShareUser: () -> Unit = EnsureNeverCalled(), + onDmStarted: (RoomId) -> Unit = EnsureNeverCalledWithParam(), + onStartCall: (RoomId) -> Unit = EnsureNeverCalledWithParam(), + goBack: () -> Unit = EnsureNeverCalled(), + openAvatarPreview: (String, String) -> Unit = EnsureNeverCalledWithTwoParams(), +) { + setContent { + UserProfileView( + state = state, + onShareUser = onShareUser, + onDmStarted = onDmStarted, + onStartCall = onStartCall, + goBack = goBack, + openAvatarPreview = openAvatarPreview, + ) + } +} diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 4f88ddc05c..e667873318 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -73,6 +73,7 @@ "Load more" "Manage account" "Manage devices" + "Message" "Next" "No" "Not now" diff --git a/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/EnsureCalledOnce.kt b/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/EnsureCalledOnce.kt index ba0b2dbf88..aa69c919ef 100644 --- a/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/EnsureCalledOnce.kt +++ b/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/EnsureCalledOnce.kt @@ -105,3 +105,9 @@ fun ensureCalledOnceWithParam(param: T, block: (callback: EnsureCalledOnc block(callback) callback.assertSuccess() } + +fun ensureCalledOnceWithTwoParams(param1: P1, param2: P2, block: (callback: EnsureCalledOnceWithTwoParams) -> Unit) { + val callback = EnsureCalledOnceWithTwoParams(param1, param2) + block(callback) + callback.assertSuccess() +} diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png index 3d4213060e..8b6bb82e6e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fc6369578a3684c1a88e904848bcb16a7e4cde46c887938db909563c6c54d2d -size 23031 +oid sha256:96414480d9e361319abf7543324927300f841633f628da68901d6291b8cfd675 +size 22667 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png index 468d483d65..03a9a3b1e4 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59e3eccfa962e9d667aaa326ab3258214334db558983bc251543835585d78453 -size 20930 +oid sha256:7388e54cc1fccc87a3257b099aa832f851aabace145cc09f965431653fc0cf35 +size 20661 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png index 5f22b0b2a8..d8f05791b5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07418c91e8efee98f7b9e7d069bf3aef2b674164dad0795719f97ad6b214225b -size 23550 +oid sha256:a5ca4c3f9c7376656357f07a6b1777bca92808eeb972f9f7d03bdac89a6c5867 +size 22987 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png index 099c6f745d..b8674d2c52 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90fe61eb831db5e1f1eb213fcdd690f06f2e547b8ad864680288d529d379d30e -size 43651 +oid sha256:2348853735daae624c99658d832382fd834a770b40fde0004089f6378ecb954c +size 41498 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png index 940ff8e950..99af2f113c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6b0328e4f5a06b59ac5b73f4230bd950bed6847af275b9e6851ffdb9403742b -size 35523 +oid sha256:364172de34c530ce2cb4799e0b5ac5aa810068794bab10c9f04f72f709ebd8fa +size 32482 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png index 5e055eea74..ab5bb1fa95 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7536568491a41526b48354b60db41e47d40b6677e5b38f464c57715499514171 -size 24193 +oid sha256:1a956800e49a48da34a49f7ec4c2647641a1c64af70e4ccbcdbdac0fb0cc5616 +size 23513 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png index 55525becf3..eabbc94384 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:902bd8ddad85ee2ea52898a910baf0c710880d94c36f56e22916bf4d15f4469c -size 25864 +oid sha256:01308cc0d4361e2685a16ce02526a9efdc4f81b86fdb982b016e090bcafa9bbb +size 23486 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e6ff40b44c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab8949d70455a9b3ef5d6414b788cb1cddec95fc238df8277dfd41c405a4060c +size 23581 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_8,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..8b6bb82e6e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Day-0_1_null_8,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96414480d9e361319abf7543324927300f841633f628da68901d6291b8cfd675 +size 22667 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png index 93516a3dd0..c053e1b2c6 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1744d73991a0987c53d214041a26eaf7a3ce8a2ff4c90739f65f8641c4af921d -size 22351 +oid sha256:4a6807e02706f29b5b748cfbbb13f9e1437e38438da1c81fa568709e5f88d7a4 +size 22041 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png index 6d992d9f94..2ed0e1891d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4598d748f84146e66b547a5d9310c7e67477e1eb66d1c58bfb23f28807b7f54d -size 20263 +oid sha256:b9b5cf8ae7992a8ef83056daa2fb8ebff0c60310ec675efa0e45faa58c0e58ad +size 20049 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png index b5e74695fe..855c0f143b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d448afa778c03771454d5493f15748dce3eeb7a7b35cd33cb38bb5a06646f5d -size 22550 +oid sha256:e256df9ae5a854a906a21868ecdf21a5d2ce37577a69a1da557949562d1da45d +size 22193 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png index 82575f3676..c734b94bf7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e000e964df93279e8325219a8a9ae74d1f66c533d418fabb88a208bc1165dbed -size 38724 +oid sha256:aefcccd96088200097cd12a934b27df29819044ab315f3e0a3e1df9228336669 +size 36801 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png index 4f2c4d458c..16e8b986ac 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf1d5e3367a9684cd4fd8ffebd4c38475fad0a6a6fa122df19281c1a3bf7349f -size 30814 +oid sha256:561230a37864cced2286168b6bfe7c9e461177c056386dc08e538643d58b15a6 +size 28162 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png index 3e589cdb18..f36f7b2281 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15c3812a12a76e5701bc1f487703ee32d6920f3c2d790f5b1d1a4b468da28000 -size 23047 +oid sha256:125d38504d4500506fcb9d85eb9ce057620e683674efb2e6b33356764a14a1af +size 22677 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png index f1278e87d7..f9af24ede2 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3fefee021f7c3bc6a8b950a129fd7549b05416ff72b32b2b24a4317555f43d8 -size 22916 +oid sha256:5600ca86ffac9b33c320432dfb75b6242d7726ef39de0bc0e227b166565fa91f +size 20622 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..a14e3941de --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cc9c9f6cdf542c4817dfcf54f43ebd3e8c7fc47d36a50e60be28642dfbdf8ae +size 22868 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_8,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c053e1b2c6 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.userprofile.shared_UserProfileView_null_UserProfileView-Night-0_2_null_8,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a6807e02706f29b5b748cfbbb13f9e1437e38438da1c81fa568709e5f88d7a4 +size 22041 From 4c1bd2d45bb94a4531a96c5b9e2bd1d35b79373e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 14:11:19 +0000 Subject: [PATCH 277/289] Update dependency com.posthog:posthog-android to v3.2.1 (#2773) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e47a555c14..31566670b9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -180,7 +180,7 @@ opusencoder = "io.element.android:opusencoder:1.1.0" kotlinpoet = "com.squareup:kotlinpoet:1.16.0" # Analytics -posthog = "com.posthog:posthog-android:3.1.18" +posthog = "com.posthog:posthog-android:3.2.1" sentry = "io.sentry:sentry-android:7.8.0" # main branch can be tested replacing the version with main-SNAPSHOT matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.21.0" From 48bb0f4122d292c4690ece7631a9751f0c04751e Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 9 May 2024 08:38:40 +0200 Subject: [PATCH 278/289] Add room badges (#2822) * Add room badges * Remove no longer used `onShareRoomMember` callback * Update screenshots * Add changelog --------- Co-authored-by: ElementBot --- changelog.d/2822.misc | 1 + .../roomdetails/impl/RoomDetailsNode.kt | 24 ---- .../roomdetails/impl/RoomDetailsPresenter.kt | 2 + .../roomdetails/impl/RoomDetailsState.kt | 1 + .../impl/RoomDetailsStateProvider.kt | 3 + .../roomdetails/impl/RoomDetailsView.kt | 54 +++++++-- .../roomdetails/impl/components/RoomBadge.kt | 104 ++++++++++++++++++ .../impl/src/main/res/values/localazy.xml | 3 + .../roomdetails/impl/RoomDetailsViewTest.kt | 3 - .../designsystem/components/Badge.kt | 93 ++++++++++++++++ .../designsystem/theme/ColorAliases.kt | 26 +++++ .../tests/konsist/KonsistPreviewTest.kt | 3 + ...eNegative-Day-2_2_null,NEXUS_5,1.0,en].png | 3 + ...egative-Night-2_3_null,NEXUS_5,1.0,en].png | 3 + ...geNeutral-Day-1_1_null,NEXUS_5,1.0,en].png | 3 + ...Neutral-Night-1_2_null,NEXUS_5,1.0,en].png | 3 + ...ePositive-Day-0_0_null,NEXUS_5,1.0,en].png | 3 + ...ositive-Night-0_1_null,NEXUS_5,1.0,en].png | 3 + ...itView-Day-3_3_null_0,NEXUS_5,1.0,en].png} | 0 ...itView-Day-3_3_null_1,NEXUS_5,1.0,en].png} | 0 ...itView-Day-3_3_null_2,NEXUS_5,1.0,en].png} | 0 ...itView-Day-3_3_null_3,NEXUS_5,1.0,en].png} | 0 ...itView-Day-3_3_null_4,NEXUS_5,1.0,en].png} | 0 ...itView-Day-3_3_null_5,NEXUS_5,1.0,en].png} | 0 ...itView-Day-3_3_null_6,NEXUS_5,1.0,en].png} | 0 ...View-Night-3_4_null_0,NEXUS_5,1.0,en].png} | 0 ...View-Night-3_4_null_1,NEXUS_5,1.0,en].png} | 0 ...View-Night-3_4_null_2,NEXUS_5,1.0,en].png} | 0 ...View-Night-3_4_null_3,NEXUS_5,1.0,en].png} | 0 ...View-Night-3_4_null_4,NEXUS_5,1.0,en].png} | 0 ...View-Night-3_4_null_5,NEXUS_5,1.0,en].png} | 0 ...View-Night-3_4_null_6,NEXUS_5,1.0,en].png} | 0 ...rsView-Day-4_4_null_0,NEXUS_5,1.0,en].png} | 0 ...rsView-Day-4_4_null_1,NEXUS_5,1.0,en].png} | 0 ...rsView-Day-4_4_null_2,NEXUS_5,1.0,en].png} | 0 ...rsView-Day-4_4_null_3,NEXUS_5,1.0,en].png} | 0 ...rsView-Day-4_4_null_4,NEXUS_5,1.0,en].png} | 0 ...rsView-Day-4_4_null_5,NEXUS_5,1.0,en].png} | 0 ...rsView-Day-4_4_null_6,NEXUS_5,1.0,en].png} | 0 ...rsView-Day-4_4_null_7,NEXUS_5,1.0,en].png} | 0 ...View-Night-4_5_null_0,NEXUS_5,1.0,en].png} | 0 ...View-Night-4_5_null_1,NEXUS_5,1.0,en].png} | 0 ...View-Night-4_5_null_2,NEXUS_5,1.0,en].png} | 0 ...View-Night-4_5_null_3,NEXUS_5,1.0,en].png} | 0 ...View-Night-4_5_null_4,NEXUS_5,1.0,en].png} | 0 ...View-Night-4_5_null_5,NEXUS_5,1.0,en].png} | 0 ...View-Night-4_5_null_6,NEXUS_5,1.0,en].png} | 0 ...View-Night-4_5_null_7,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_0,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_1,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_2,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_3,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_4,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_5,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_6,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_7,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_8,NEXUS_5,1.0,en].png} | 0 ...onView-Day-7_7_null_9,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_0,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_1,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_2,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_3,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_4,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_5,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_6,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_7,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_8,NEXUS_5,1.0,en].png} | 0 ...View-Night-7_8_null_9,NEXUS_5,1.0,en].png} | 0 ...Banned-Day-6_6_null_0,NEXUS_5,1.0,en].png} | 0 ...Banned-Day-6_6_null_1,NEXUS_5,1.0,en].png} | 0 ...Banned-Day-6_6_null_2,NEXUS_5,1.0,en].png} | 0 ...nned-Night-6_7_null_0,NEXUS_5,1.0,en].png} | 0 ...nned-Night-6_7_null_1,NEXUS_5,1.0,en].png} | 0 ...nned-Night-6_7_null_2,NEXUS_5,1.0,en].png} | 0 ...stView-Day-5_5_null_0,NEXUS_5,1.0,en].png} | 0 ...stView-Day-5_5_null_1,NEXUS_5,1.0,en].png} | 0 ...stView-Day-5_5_null_2,NEXUS_5,1.0,en].png} | 0 ...stView-Day-5_5_null_3,NEXUS_5,1.0,en].png} | 0 ...stView-Day-5_5_null_4,NEXUS_5,1.0,en].png} | 0 ...stView-Day-5_5_null_5,NEXUS_5,1.0,en].png} | 0 ...stView-Day-5_5_null_6,NEXUS_5,1.0,en].png} | 0 ...stView-Day-5_5_null_7,NEXUS_5,1.0,en].png} | 0 ...View-Night-5_6_null_0,NEXUS_5,1.0,en].png} | 0 ...View-Night-5_6_null_1,NEXUS_5,1.0,en].png} | 0 ...View-Night-5_6_null_2,NEXUS_5,1.0,en].png} | 0 ...View-Night-5_6_null_3,NEXUS_5,1.0,en].png} | 0 ...View-Night-5_6_null_4,NEXUS_5,1.0,en].png} | 0 ...View-Night-5_6_null_5,NEXUS_5,1.0,en].png} | 0 ...View-Night-5_6_null_6,NEXUS_5,1.0,en].png} | 0 ...View-Night-5_6_null_7,NEXUS_5,1.0,en].png} | 0 ...gsOption-Day-8_8_null,NEXUS_5,1.0,en].png} | 0 ...Option-Night-8_9_null,NEXUS_5,1.0,en].png} | 0 ...gsView-Day-9_9_null_0,NEXUS_5,1.0,en].png} | 0 ...gsView-Day-9_9_null_1,NEXUS_5,1.0,en].png} | 0 ...gsView-Day-9_9_null_2,NEXUS_5,1.0,en].png} | 0 ...gsView-Day-9_9_null_3,NEXUS_5,1.0,en].png} | 0 ...gsView-Day-9_9_null_4,NEXUS_5,1.0,en].png} | 0 ...gsView-Day-9_9_null_5,NEXUS_5,1.0,en].png} | 0 ...gsView-Day-9_9_null_6,NEXUS_5,1.0,en].png} | 0 ...iew-Night-9_10_null_0,NEXUS_5,1.0,en].png} | 0 ...iew-Night-9_10_null_1,NEXUS_5,1.0,en].png} | 0 ...iew-Night-9_10_null_2,NEXUS_5,1.0,en].png} | 0 ...iew-Night-9_10_null_3,NEXUS_5,1.0,en].png} | 0 ...iew-Night-9_10_null_4,NEXUS_5,1.0,en].png} | 0 ...iew-Night-9_10_null_5,NEXUS_5,1.0,en].png} | 0 ...iew-Night-9_10_null_6,NEXUS_5,1.0,en].png} | 0 ...View-Day-10_10_null_0,NEXUS_5,1.0,en].png} | 0 ...ew-Night-10_11_null_0,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_0,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_1,NEXUS_5,1.0,en].png} | 0 ...iew-Day-12_12_null_10,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_2,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_3,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_4,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_5,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_6,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_7,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_8,NEXUS_5,1.0,en].png} | 0 ...View-Day-12_12_null_9,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_0,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_1,NEXUS_5,1.0,en].png} | 0 ...w-Night-12_13_null_10,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_2,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_3,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_4,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_5,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_6,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_7,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_8,NEXUS_5,1.0,en].png} | 0 ...ew-Night-12_13_null_9,NEXUS_5,1.0,en].png} | 0 ...ngName-Day-13_13_null,NEXUS_5,1.0,en].png} | 0 ...Name-Night-13_14_null,NEXUS_5,1.0,en].png} | 0 ...View-Day-14_14_null_0,NEXUS_5,1.0,en].png} | 0 ...View-Day-14_14_null_1,NEXUS_5,1.0,en].png} | 0 ...View-Day-14_14_null_2,NEXUS_5,1.0,en].png} | 0 ...View-Day-14_14_null_3,NEXUS_5,1.0,en].png} | 0 ...View-Day-14_14_null_4,NEXUS_5,1.0,en].png} | 0 ...View-Day-14_14_null_5,NEXUS_5,1.0,en].png} | 0 ...View-Day-14_14_null_6,NEXUS_5,1.0,en].png} | 0 ...ew-Night-14_15_null_0,NEXUS_5,1.0,en].png} | 0 ...ew-Night-14_15_null_1,NEXUS_5,1.0,en].png} | 0 ...ew-Night-14_15_null_2,NEXUS_5,1.0,en].png} | 0 ...ew-Night-14_15_null_3,NEXUS_5,1.0,en].png} | 0 ...ew-Night-14_15_null_4,NEXUS_5,1.0,en].png} | 0 ...ew-Night-14_15_null_5,NEXUS_5,1.0,en].png} | 0 ...ew-Night-14_15_null_6,NEXUS_5,1.0,en].png} | 0 ...View-Day-11_11_null_0,NEXUS_5,1.0,en].png} | 0 ...View-Day-11_11_null_1,NEXUS_5,1.0,en].png} | 0 ...View-Day-11_11_null_2,NEXUS_5,1.0,en].png} | 0 ...View-Day-11_11_null_3,NEXUS_5,1.0,en].png} | 0 ...View-Day-11_11_null_4,NEXUS_5,1.0,en].png} | 0 ...View-Day-11_11_null_5,NEXUS_5,1.0,en].png} | 0 ...View-Day-11_11_null_6,NEXUS_5,1.0,en].png} | 0 ...View-Day-11_11_null_7,NEXUS_5,1.0,en].png} | 0 ...ew-Night-11_12_null_0,NEXUS_5,1.0,en].png} | 0 ...ew-Night-11_12_null_1,NEXUS_5,1.0,en].png} | 0 ...ew-Night-11_12_null_2,NEXUS_5,1.0,en].png} | 0 ...ew-Night-11_12_null_3,NEXUS_5,1.0,en].png} | 0 ...ew-Night-11_12_null_4,NEXUS_5,1.0,en].png} | 0 ...ew-Night-11_12_null_5,NEXUS_5,1.0,en].png} | 0 ...ew-Night-11_12_null_6,NEXUS_5,1.0,en].png} | 0 ...ew-Night-11_12_null_7,NEXUS_5,1.0,en].png} | 0 ...etailsDark--1_3_null_0,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_1,NEXUS_5,1.0,en].png | 4 +- ...tailsDark--1_3_null_10,NEXUS_5,1.0,en].png | 4 +- ...tailsDark--1_3_null_11,NEXUS_5,1.0,en].png | 3 + ...etailsDark--1_3_null_2,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_3,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_4,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_5,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_6,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_7,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_8,NEXUS_5,1.0,en].png | 4 +- ...etailsDark--1_3_null_9,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_0,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_1,NEXUS_5,1.0,en].png | 4 +- ...omDetails--0_2_null_10,NEXUS_5,1.0,en].png | 4 +- ...omDetails--0_2_null_11,NEXUS_5,1.0,en].png | 3 + ...oomDetails--0_2_null_2,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_3,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_4,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_5,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_6,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_7,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_8,NEXUS_5,1.0,en].png | 4 +- ...oomDetails--0_2_null_9,NEXUS_5,1.0,en].png | 4 +- ..._null_Badge-Day_0_null,NEXUS_5,1.0,en].png | 3 + ...ull_Badge-Night_1_null,NEXUS_5,1.0,en].png | 3 + 188 files changed, 355 insertions(+), 80 deletions(-) create mode 100644 changelog.d/2822.misc create mode 100644 features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/components/RoomBadge.kt create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Badge.kt create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNegative_null_RoomBadgeNegative-Day-2_2_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNegative_null_RoomBadgeNegative-Night-2_3_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNeutral_null_RoomBadgeNeutral-Day-1_1_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNeutral_null_RoomBadgeNeutral-Night-1_2_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgePositive_null_RoomBadgePositive-Day-0_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgePositive_null_RoomBadgePositive-Night-0_1_null,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-8_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_6_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-8_9_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-10_10_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_8_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-10_11_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_10,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_10,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_8,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_8,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_9,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_9,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-13_13_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_11_null,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-13_14_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_7,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_0,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_1,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_2,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_3,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_4,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_5,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_6,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_7,NEXUS_5,1.0,en].png => ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_7,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_11,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_11,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_Badge_null_Badge-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_Badge_null_Badge-Night_1_null,NEXUS_5,1.0,en].png diff --git a/changelog.d/2822.misc b/changelog.d/2822.misc new file mode 100644 index 0000000000..5c83de91fe --- /dev/null +++ b/changelog.d/2822.misc @@ -0,0 +1 @@ +Add room badges to room details screen. diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt index 80a2d5d5d4..83eb19dc37 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt @@ -32,9 +32,7 @@ import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.androidutils.system.startSharePlainTextIntent import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -48,7 +46,6 @@ class RoomDetailsNode @AssistedInject constructor( private val presenter: RoomDetailsPresenter, private val room: MatrixRoom, private val analyticsService: AnalyticsService, - private val permalinkBuilder: PermalinkBuilder, ) : Node(buildContext, plugins = plugins) { interface Callback : Plugin { fun openRoomMemberList() @@ -106,22 +103,6 @@ class RoomDetailsNode @AssistedInject constructor( } } - private fun onShareMember(context: Context, member: RoomMember) { - val permalinkResult = permalinkBuilder.permalinkForUser(member.userId) - permalinkResult - .onSuccess { permalink -> - context.startSharePlainTextIntent( - activityResultLauncher = null, - chooserTitle = context.getString(R.string.screen_room_details_share_room_title), - text = permalink, - noActivityFoundMessage = context.getString(AndroidUtilsR.string.error_no_compatible_app_found) - ) - } - .onFailure { - Timber.e(it) - } - } - private fun onEditRoomDetails() { callbacks.forEach { it.editRoomDetails() } } @@ -143,10 +124,6 @@ class RoomDetailsNode @AssistedInject constructor( lifecycleScope.onShareRoom(context) } - fun onShareMember(roomMember: RoomMember) { - this.onShareMember(context, roomMember) - } - fun onActionClicked(action: RoomDetailsAction) { when (action) { RoomDetailsAction.Edit -> onEditRoomDetails() @@ -160,7 +137,6 @@ class RoomDetailsNode @AssistedInject constructor( goBack = this::navigateUp, onActionClicked = ::onActionClicked, onShareRoom = ::onShareRoom, - onShareMember = ::onShareMember, openRoomMemberList = ::openRoomMemberList, openRoomNotificationSettings = ::openRoomNotificationSettings, invitePeople = ::invitePeople, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index 5aa7baf0ea..848b9edc43 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -78,6 +78,7 @@ class RoomDetailsPresenter @Inject constructor( val roomName by remember { derivedStateOf { (roomInfo?.name ?: room.name ?: room.displayName).trim() } } val roomTopic by remember { derivedStateOf { roomInfo?.topic ?: room.topic } } val isFavorite by remember { derivedStateOf { roomInfo?.isFavorite.orFalse() } } + val isPublic by remember { derivedStateOf { roomInfo?.isPublic.orFalse() } } LaunchedEffect(Unit) { canShowNotificationSettings.value = featureFlagService.isFeatureEnabled(FeatureFlags.NotificationSettings) @@ -149,6 +150,7 @@ class RoomDetailsPresenter @Inject constructor( roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(), isFavorite = isFavorite, displayRolesAndPermissionsSettings = !room.isDm && isUserAdmin, + isPublic = isPublic, eventSink = ::handleEvents, ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt index 51b89b50b5..43605eb7b6 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt @@ -41,6 +41,7 @@ data class RoomDetailsState( val roomNotificationSettings: RoomNotificationSettings?, val isFavorite: Boolean, val displayRolesAndPermissionsSettings: Boolean, + val isPublic: Boolean, val eventSink: (RoomDetailsEvent) -> Unit ) 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 5bfac47f7e..f970b80d82 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 @@ -47,6 +47,7 @@ open class RoomDetailsStateProvider : PreviewParameterProvider roomNotificationSettings = aRoomNotificationSettings(mode = RoomNotificationMode.ALL_MESSAGES, isDefault = true) ), aRoomDetailsState(canCall = false, canInvite = false), + aRoomDetailsState(isPublic = false), // Add other state here ) } @@ -97,6 +98,7 @@ fun aRoomDetailsState( roomNotificationSettings: RoomNotificationSettings = aRoomNotificationSettings(), isFavorite: Boolean = false, displayAdminSettings: Boolean = false, + isPublic: Boolean = true, eventSink: (RoomDetailsEvent) -> Unit = {}, ) = RoomDetailsState( roomId = roomId, @@ -116,6 +118,7 @@ fun aRoomDetailsState( roomNotificationSettings = roomNotificationSettings, isFavorite = isFavorite, displayRolesAndPermissionsSettings = displayAdminSettings, + isPublic = isPublic, eventSink = eventSink ) 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 6c6a194a88..76807c07e6 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 @@ -48,6 +48,7 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.leaveroom.api.LeaveRoomView +import io.element.android.features.roomdetails.impl.components.RoomBadge import io.element.android.features.userprofile.shared.UserProfileHeaderSection import io.element.android.features.userprofile.shared.blockuser.BlockUserDialogs import io.element.android.features.userprofile.shared.blockuser.BlockUserSection @@ -78,7 +79,6 @@ import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.utils.CommonDrawables 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.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.getBestName import io.element.android.libraries.testtags.TestTags @@ -91,7 +91,6 @@ fun RoomDetailsView( goBack: () -> Unit, onActionClicked: (RoomDetailsAction) -> Unit, onShareRoom: () -> Unit, - onShareMember: (RoomMember) -> Unit, openRoomMemberList: () -> Unit, openRoomNotificationSettings: () -> Unit, invitePeople: () -> Unit, @@ -101,10 +100,6 @@ fun RoomDetailsView( onJoinCallClicked: () -> Unit, modifier: Modifier = Modifier, ) { - fun onShareMember() { - onShareMember((state.roomType as RoomDetailsType.Dm).roomMember) - } - Scaffold( modifier = modifier, topBar = { @@ -130,6 +125,8 @@ fun RoomDetailsView( roomId = state.roomId, roomName = state.roomName, roomAlias = state.roomAlias, + isEncrypted = state.isEncrypted, + isPublic = state.isPublic, openAvatarPreview = { avatarUrl -> openAvatarPreview(state.roomName, avatarUrl) }, @@ -160,7 +157,7 @@ fun RoomDetailsView( ) } } - Spacer(Modifier.height(18.dp)) + Spacer(Modifier.height(12.dp)) if (state.roomTopic !is RoomTopicState.Hidden) { TopicSection( @@ -269,7 +266,9 @@ private fun MainActionsSection( onCall: () -> Unit, ) { Row( - modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), horizontalArrangement = Arrangement.SpaceEvenly, ) { val roomNotificationSettings = state.roomNotificationSettings @@ -323,6 +322,8 @@ private fun RoomHeaderSection( roomId: RoomId, roomName: String, roomAlias: RoomAlias?, + isEncrypted: Boolean, + isPublic: Boolean, openAvatarPreview: (url: String) -> Unit, ) { Column( @@ -353,10 +354,46 @@ private fun RoomHeaderSection( textAlign = TextAlign.Center, ) } + BadgeList(isEncrypted = isEncrypted, isPublic = isPublic) Spacer(Modifier.height(32.dp)) } } +@Composable +private fun BadgeList( + isEncrypted: Boolean, + isPublic: Boolean, +) { + if (isEncrypted || isPublic) { + Spacer(modifier = Modifier.height(8.dp)) + Row( + modifier = Modifier.padding(horizontal = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + if (isEncrypted) { + RoomBadge.View( + text = stringResource(R.string.screen_room_details_badge_encrypted), + icon = CompoundIcons.LockSolid(), + type = RoomBadge.Type.Positive, + ) + } else { + RoomBadge.View( + text = stringResource(R.string.screen_room_details_badge_not_encrypted), + icon = CompoundIcons.LockOff(), + type = RoomBadge.Type.Neutral, + ) + } + if (isPublic) { + RoomBadge.View( + text = stringResource(R.string.screen_room_details_badge_public), + icon = CompoundIcons.Public(), + type = RoomBadge.Type.Neutral, + ) + } + } + } +} + @Composable private fun TopicSection( roomTopic: RoomTopicState, @@ -489,7 +526,6 @@ private fun ContentToPreview(state: RoomDetailsState) { goBack = {}, onActionClicked = {}, onShareRoom = {}, - onShareMember = {}, openRoomMemberList = {}, openRoomNotificationSettings = {}, invitePeople = {}, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/components/RoomBadge.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/components/RoomBadge.kt new file mode 100644 index 0000000000..5a1b4eb978 --- /dev/null +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/components/RoomBadge.kt @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomdetails.impl.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.vector.ImageVector +import io.element.android.compound.theme.ElementTheme +import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.libraries.designsystem.components.Badge +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.designsystem.theme.badgeNegativeBackgroundColor +import io.element.android.libraries.designsystem.theme.badgeNegativeContentColor +import io.element.android.libraries.designsystem.theme.badgeNeutralBackgroundColor +import io.element.android.libraries.designsystem.theme.badgeNeutralContentColor +import io.element.android.libraries.designsystem.theme.badgePositiveBackgroundColor +import io.element.android.libraries.designsystem.theme.badgePositiveContentColor + +object RoomBadge { + enum class Type { + Positive, + Neutral, + Negative + } + + @Composable fun View( + text: String, + icon: ImageVector, + type: Type, + ) { + val backgroundColor = when (type) { + Type.Positive -> ElementTheme.colors.badgePositiveBackgroundColor + Type.Neutral -> ElementTheme.colors.badgeNeutralBackgroundColor + Type.Negative -> ElementTheme.colors.badgeNegativeBackgroundColor + } + val textColor = when (type) { + Type.Positive -> ElementTheme.colors.badgePositiveContentColor + Type.Neutral -> ElementTheme.colors.badgeNeutralContentColor + Type.Negative -> ElementTheme.colors.badgeNegativeContentColor + } + val iconColor = when (type) { + Type.Positive -> ElementTheme.colors.iconSuccessPrimary + Type.Neutral -> ElementTheme.colors.iconSecondary + Type.Negative -> ElementTheme.colors.iconCriticalPrimary + } + Badge( + text = text, + icon = icon, + backgroundColor = backgroundColor, + iconColor = iconColor, + textColor = textColor, + ) + } +} + +@PreviewsDayNight +@Composable +internal fun RoomBadgePositivePreview() { + ElementPreview { + RoomBadge.View( + text = "Trusted", + icon = CompoundIcons.Verified(), + type = RoomBadge.Type.Positive, + ) + } +} + +@PreviewsDayNight +@Composable +internal fun RoomBadgeNeutralPreview() { + ElementPreview { + RoomBadge.View( + text = "Public room", + icon = CompoundIcons.Public(), + type = RoomBadge.Type.Neutral, + ) + } +} + +@PreviewsDayNight +@Composable +internal fun RoomBadgeNegativePreview() { + ElementPreview { + RoomBadge.View( + text = "Not trusted", + icon = CompoundIcons.Error(), + type = RoomBadge.Type.Negative, + ) + } +} diff --git a/features/roomdetails/impl/src/main/res/values/localazy.xml b/features/roomdetails/impl/src/main/res/values/localazy.xml index 9ffccd0c29..19400c85b3 100644 --- a/features/roomdetails/impl/src/main/res/values/localazy.xml +++ b/features/roomdetails/impl/src/main/res/values/localazy.xml @@ -35,6 +35,9 @@ "Add topic" "Already a member" "Already invited" + "Encrypted" + "Not encrypted" + "Public room" "Edit Room" "There was an unknown error and the information couldn\'t be changed." "Unable to update room" diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt index 802f08c344..febd213e0c 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsViewTest.kt @@ -23,7 +23,6 @@ import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.performClick import androidx.test.ext.junit.runners.AndroidJUnit4 -import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.ui.strings.CommonStrings @@ -251,7 +250,6 @@ private fun AndroidComposeTestRule.setRoomD goBack: () -> Unit = EnsureNeverCalled(), onActionClicked: (RoomDetailsAction) -> Unit = EnsureNeverCalledWithParam(), onShareRoom: () -> Unit = EnsureNeverCalled(), - onShareMember: (RoomMember) -> Unit = EnsureNeverCalledWithParam(), openRoomMemberList: () -> Unit = EnsureNeverCalled(), openRoomNotificationSettings: () -> Unit = EnsureNeverCalled(), invitePeople: () -> Unit = EnsureNeverCalled(), @@ -266,7 +264,6 @@ private fun AndroidComposeTestRule.setRoomD goBack = goBack, onActionClicked = onActionClicked, onShareRoom = onShareRoom, - onShareMember = onShareMember, openRoomMemberList = openRoomMemberList, openRoomNotificationSettings = openRoomNotificationSettings, invitePeople = invitePeople, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Badge.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Badge.kt new file mode 100644 index 0000000000..1bf06644c6 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Badge.kt @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.components + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme +import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.designsystem.theme.badgePositiveBackgroundColor +import io.element.android.libraries.designsystem.theme.badgePositiveContentColor +import io.element.android.libraries.designsystem.theme.components.Icon +import io.element.android.libraries.designsystem.theme.components.Surface +import io.element.android.libraries.designsystem.theme.components.Text + +@Suppress("ModifierMissing") +@Composable +fun Badge( + text: String, + icon: ImageVector, + backgroundColor: Color, + textColor: Color, + iconColor: Color, + shape: Shape = RoundedCornerShape(50), + borderStroke: BorderStroke? = null, + tintIcon: Boolean = true, +) { + Surface( + color = backgroundColor, + contentColor = textColor, + border = borderStroke, + shape = shape, + ) { + Row( + modifier = Modifier.padding(start = 8.dp, end = 12.dp, top = 4.5.dp, bottom = 4.5.dp), + horizontalArrangement = Arrangement.spacedBy(5.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier.size(16.dp), + imageVector = icon, + contentDescription = null, + tint = if (tintIcon) iconColor else LocalContentColor.current, + ) + Text( + text = text, + style = ElementTheme.typography.fontBodySmRegular, + color = textColor, + ) + } + } +} + +@PreviewsDayNight +@Composable +internal fun BadgePreview() { + ElementPreview { + Badge( + text = "Trusted", + icon = CompoundIcons.Verified(), + backgroundColor = ElementTheme.colors.badgePositiveBackgroundColor, + textColor = ElementTheme.colors.badgePositiveContentColor, + iconColor = ElementTheme.colors.iconSuccessPrimary, + ) + } +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 053e1c1d37..5fc6fd2a23 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -153,6 +153,32 @@ val SemanticColors.bigCheckmarkBorderColor val SemanticColors.highlightedMessageBackgroundColor get() = if (isLight) LightColorTokens.colorGreen300 else DarkColorTokens.colorGreen300 +// Badge colors + +@OptIn(CoreColorToken::class) +val SemanticColors.badgePositiveBackgroundColor + get() = if (isLight) LightColorTokens.colorAlphaGreen300 else DarkColorTokens.colorAlphaGreen300 + +@OptIn(CoreColorToken::class) +val SemanticColors.badgePositiveContentColor + get() = if (isLight) LightColorTokens.colorGreen1100 else DarkColorTokens.colorGreen1100 + +@OptIn(CoreColorToken::class) +val SemanticColors.badgeNeutralBackgroundColor + get() = if (isLight) LightColorTokens.colorAlphaGray300 else DarkColorTokens.colorAlphaGray300 + +@OptIn(CoreColorToken::class) +val SemanticColors.badgeNeutralContentColor + get() = if (isLight) LightColorTokens.colorGray1100 else DarkColorTokens.colorGray1100 + +@OptIn(CoreColorToken::class) +val SemanticColors.badgeNegativeBackgroundColor + get() = if (isLight) LightColorTokens.colorAlphaRed300 else DarkColorTokens.colorAlphaRed300 + +@OptIn(CoreColorToken::class) +val SemanticColors.badgeNegativeContentColor + get() = if (isLight) LightColorTokens.colorRed1100 else DarkColorTokens.colorRed1100 + @PreviewsDayNight @Composable internal fun ColorAliasesPreview() = ElementPreview { diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index 6145e9bcdc..75b0df9837 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -101,6 +101,9 @@ class KonsistPreviewTest { "PollContentViewEndedPreview", "PollContentViewUndisclosedPreview", "ReadReceiptBottomSheetPreview", + "RoomBadgePositivePreview", + "RoomBadgeNeutralPreview", + "RoomBadgeNegativePreview", "RoomMemberListViewBannedPreview", "SasEmojisPreview", "SecureBackupSetupViewChangePreview", diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNegative_null_RoomBadgeNegative-Day-2_2_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNegative_null_RoomBadgeNegative-Day-2_2_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..32ad6c67e0 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNegative_null_RoomBadgeNegative-Day-2_2_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36732b00716ecb119ec28287f6f7529d4dfaf97e73ab87b43b38bc98ae8c26a1 +size 7657 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNegative_null_RoomBadgeNegative-Night-2_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNegative_null_RoomBadgeNegative-Night-2_3_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..652bc264d0 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNegative_null_RoomBadgeNegative-Night-2_3_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfb7055db252f4b67fd7a02e1d2fef518f4c341c66de80e498975cde1aafa753 +size 7613 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNeutral_null_RoomBadgeNeutral-Day-1_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNeutral_null_RoomBadgeNeutral-Day-1_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..52bae3464e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNeutral_null_RoomBadgeNeutral-Day-1_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0d2167073409a0f6ec2d1bb29441e155bf557f92f5f1816ebb92ba2e639c624 +size 7671 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNeutral_null_RoomBadgeNeutral-Night-1_2_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNeutral_null_RoomBadgeNeutral-Night-1_2_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..78f319a3ef --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgeNeutral_null_RoomBadgeNeutral-Night-1_2_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15db0579b31a2c0f397555b4ede3e51818a0635753b1bdc1de2356c28bff6b10 +size 7541 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgePositive_null_RoomBadgePositive-Day-0_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgePositive_null_RoomBadgePositive-Day-0_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5971a0d7b8 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgePositive_null_RoomBadgePositive-Day-0_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ca020d90c2244213df7e8b2b9401aefefdcab1c6d76d3f686019e4ecc2f5dd +size 7208 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgePositive_null_RoomBadgePositive-Night-0_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgePositive_null_RoomBadgePositive-Night-0_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d5ded157ac --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.components_RoomBadgePositive_null_RoomBadgePositive-Night-0_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f4eca223c607db377a78994d165d277e9e9f8b9f1d319b5995ba5395413de62 +size 6925 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-0_0_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Day-3_3_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-0_1_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.edit_RoomDetailsEditView_null_RoomDetailsEditView-Night-3_4_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-1_1_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Day-4_4_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-1_2_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.invite_RoomInviteMembersView_null_RoomInviteMembersView-Night-4_5_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-4_4_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Day-7_7_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-4_5_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members.moderation_RoomMembersModerationView_null_RoomMembersModerationView-Night-7_8_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-3_3_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Day-6_6_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-3_4_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListViewBanned_null_RoomMemberListViewBanned-Night-6_7_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-2_2_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Day-5_5_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-2_3_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberListView_null_RoomMemberListView-Night-5_6_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-8_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-5_5_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Day-8_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-8_9_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-5_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_null_RoomNotificationSettingsOption-Night-8_9_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-6_6_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Day-9_9_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-6_7_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_null_RoomNotificationSettingsView-Night-9_10_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-10_10_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-7_7_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Day-10_10_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_8_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-10_11_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-7_8_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_null_UserDefinedRoomNotificationSettingsView-Night-10_11_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-9_9_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Day-12_12_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_10,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_10,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_10,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_8,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_8,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_8,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_9,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-9_10_null_9,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_null_ChangeRolesView-Night-12_13_null_9,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-13_13_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-10_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Day-13_13_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-13_14_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-10_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_null_PendingMemberRowWithLongName-Night-13_14_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Day-14_14_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_null_ChangeRoomPermissionsView-Night-14_15_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-8_8_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Day-11_11_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_2,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_3,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_3,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_4,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_4,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_5,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_5,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_6,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_6,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_7,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-8_9_null_7,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_null_RolesAndPermissionsView-Night-11_12_null_7,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png index 0aa6af6ee6..ce78177251 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba1133eb6569d4821b12fe56c3347a472bd95ad5b269546fed57f249e365d432 -size 47379 +oid sha256:81c178b2e03d4266d2d2d3d9fa012d9cb08d0f3b75c5d7503a3bd13471164e38 +size 48886 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png index 47ed3e0c55..7847ec2b8b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0f46ff6cfe976d3d96ecbf323fcf2ed2ed57c326c3bed3c450c30e851442567 -size 33239 +oid sha256:01a897a37b62ee5b0bedfb3612f1ccf6c07b530189493cb4ec5e17ba0a7b5076 +size 36732 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_10,NEXUS_5,1.0,en].png index ac8b4f88da..2bd304b600 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3a1bc43adac954bc9ab1b9b9d69814e376d2f2a41006b8126acdeb19bb93df7 -size 44471 +oid sha256:9db61045dccfc5f08d6cc70ba08a713675a2f82d262a07218a3e91be243f3b59 +size 47155 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_11,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..33e4f0278d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_11,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccfb295c48265ddf9e9f86ae72332f00e069913cd1b386b3837cfd63212e8646 +size 46080 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png index 2d3b01d016..5287b32fd9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84dcef17832aad71a9bf0505346731b27f882795d9bf75b194b647dfad40eca2 -size 35595 +oid sha256:bec05d2faffd43cb40c1e3719dd41bf54925e3603a051c1dfb96b2ae526051c8 +size 38750 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png index a913fd1e41..a6146ef719 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72b731453adaad784d3c037c06defd7b24939435ab54ee47a693f6aabcc0dce7 -size 34928 +oid sha256:5a02190ad01b641b33240fcda9b73d82cd866c5bc479e9608eccc38c4aeb551f +size 38027 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png index 315ccc031d..7a9120543d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c675a4d9422ba2d73e860420e25f10a21c899b33e780a4f61a41f71921f3078a -size 42471 +oid sha256:4d3e5bbfb5b25144c6f58cc488ee05f02a52aec60d92b0f874e418818fe22cc7 +size 45278 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png index fdebce0be9..21a660adf3 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e1a3a63380ed457edaf6c5e992238647724e1f6e64e0d0693b279b7e93c8be9 -size 43338 +oid sha256:11cb6d0c0a93d0243da744e6949d474daaeff6fd5ed887ef9aa0a7868f540b59 +size 43332 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png index fdebce0be9..21a660adf3 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e1a3a63380ed457edaf6c5e992238647724e1f6e64e0d0693b279b7e93c8be9 -size 43338 +oid sha256:11cb6d0c0a93d0243da744e6949d474daaeff6fd5ed887ef9aa0a7868f540b59 +size 43332 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png index 3e5b34bb68..385bb5e950 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78a182e17a2ef55a4d7dbcb4ad952d5f06f12044da4dc3578a5cd3cb7b7d34a1 -size 45723 +oid sha256:a3e95402abb88a692ce0afefefdf9d00a8d49a94753a103d153ccf245030d50c +size 48530 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png index e8fc878d37..020d2af7a6 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccf59aaaba1ebbf35518840ba069f2ea587c5f5590ed1f0be5904922d10321e0 -size 44535 +oid sha256:64afb6ebe3d2bceb0fc70a485669b47376d57e24aba8ba2723e529f77d7a1d3e +size 47458 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png index 528460a99a..5aa3a85e82 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetailsDark_null_RoomDetailsDark--1_3_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:972414b2900a7b2fddc7c45640f0718bbed3ff799067a0dde4f9e3f2fb70266a -size 44574 +oid sha256:870186a9495fbfeeffe0db91c445c204b86ad3d4004e228d42c12092a624c932 +size 47329 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png index 8674de33ba..27e28c3ba9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f89ab41056584b086cf6fbeabff68cee7ee7dde4d52fcef9849dcdc296c69a1e -size 48983 +oid sha256:5e88aa176bb71a1351f8892c8c732a346729a7dbf205398658ea41a009e44130 +size 50425 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png index 3fe4f5ea55..f864ee8b0e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3dead46255af9a750e9afe09f2e5201a4f12adea8f2e1a3d0806062775e3ea0 -size 34587 +oid sha256:afe443cf25c580453fc4e7d940dfb6e3e19187a29571ce87aaebae0e99e92c33 +size 38065 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_10,NEXUS_5,1.0,en].png index 5f4f2473e5..21fe22fa2b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52ded1bfd8ff7a95041172bdca31be2a869f5e2b81f1b181f0ece14ffdf4c7aa -size 45708 +oid sha256:504fbb8c0b82d45b08eeffa24b4b3ff5f6fe1cdb117f0e4c1871a00156dffb3e +size 48521 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_11,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_11,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..af45e7cb1f --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_11,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff240cf0af5a4bdc93ed9a58f0c20fe8e3c3a9baa8b3ef4a897be2eca6f595d8 +size 47432 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png index a9bcccc16c..61e79d6304 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82107faba76f5c6cc992ec47d6e4d765761743094fcae65c5ed948fce3cf1f05 -size 37183 +oid sha256:29205065f00b23986a013290b1696ebb6444bd0180c36184ee43249354ff005a +size 40267 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png index ace749a573..19aad9bc9e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73a016fc3d40517042f8d231ab682d71e477843195fbe4e080cd62fc12e8b954 -size 35778 +oid sha256:103fad78a2422bc78e593dd1d9ca6cf308a8b63966b8c93276d7e42373d969fc +size 39071 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png index d6cd988f6a..646d1c6936 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9250d7927307d397b969e0803ed9965a7ae301347446fef264004d690d064f6 -size 43826 +oid sha256:b9236daa5489af13ae1bd73a87b920fda72d5f8e4cf3bb56ecb37d386f251297 +size 46676 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png index 961d0de098..7dbbd042c0 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aacd02b8bc6b9cd63bfd7e49e2f1feacdee4290495905246b81d29622f1ef6b -size 44611 +oid sha256:50635e6e50f6591d1f5ec40a1a7da32bfd4b378c82d27ce44a8ad98daa17a308 +size 44626 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png index 961d0de098..7dbbd042c0 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aacd02b8bc6b9cd63bfd7e49e2f1feacdee4290495905246b81d29622f1ef6b -size 44611 +oid sha256:50635e6e50f6591d1f5ec40a1a7da32bfd4b378c82d27ce44a8ad98daa17a308 +size 44626 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png index fb7e2778dc..52149b56b7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_7,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd42eba5e0daa676298cfb2813d595083e8abd1c5abf8dfb416910fbbc2ea02c -size 47128 +oid sha256:13e941d64a5033329b966fcfb1830a64a86ed68142a5d492bdb6a1cc6554b4bf +size 50136 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png index 5c7801f83c..8bb91a8e43 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_8,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58cdd2ba7d10769a29ad59fa2cff7c972767d01352d656a06bfcb922522980b3 -size 45918 +oid sha256:89af70e55c2956b212e881f5e756d35569514ce6690a9f42492156af54df3405 +size 48934 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png index 9945d7f6f0..d03851a79f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl_RoomDetails_null_RoomDetails--0_2_null_9,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43d176f6e953006f72b09ba374f95c28388f10ce600c9d495761c4c11ccc109b -size 45874 +oid sha256:291881b0ca2e1a802f12bf7341a168e0a9315f3ffbb845553633880042af40f0 +size 48763 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_Badge_null_Badge-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_Badge_null_Badge-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..5971a0d7b8 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_Badge_null_Badge-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ca020d90c2244213df7e8b2b9401aefefdcab1c6d76d3f686019e4ecc2f5dd +size 7208 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_Badge_null_Badge-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_Badge_null_Badge-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d5ded157ac --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_Badge_null_Badge-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f4eca223c607db377a78994d165d277e9e9f8b9f1d319b5995ba5395413de62 +size 6925 From 0ed4109c70b21cd1934d25c15862a05baed73005 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 9 May 2024 10:25:53 +0200 Subject: [PATCH 279/289] Split Maestro CI flow in 2 jobs. (#2823) * Split Maestro CI flow in 2 jobs. This way, if the Maestro test fails for some runtime reason we don't have to build the APK again to re-test it. --- .github/workflows/maestro.yml | 40 +++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml index d0e57497a5..dc625aba32 100644 --- a/.github/workflows/maestro.yml +++ b/.github/workflows/maestro.yml @@ -12,12 +12,10 @@ env: CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 --no-daemon jobs: - maestro-cloud: - name: Maestro test suite + build-apk: + name: Build APK runs-on: ubuntu-latest if: github.event_name == 'workflow_dispatch' || github.event.label.name == 'Run-Maestro' - strategy: - fail-fast: false # Allow one per PR. concurrency: group: ${{ format('maestro-{0}', github.ref) }} @@ -41,19 +39,49 @@ jobs: distribution: 'temurin' # See 'Supported distributions' for available options java-version: '17' - name: Assemble debug APK - run: ./gradlew :app:assembleDebug $CI_GRADLE_ARG_PROPERTIES + run: ./gradlew :app:assembleGplayDebug $CI_GRADLE_ARG_PROPERTIES if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch' env: ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }} ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }} ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }} + - name: Upload APK as artifact + uses: actions/upload-artifact@v4 + with: + name: elementx-apk-maestro + path: | + app/build/outputs/apk/gplay/debug/app-gplay-x86_64-debug.apk + retention-days: 5 + overwrite: true + if-no-files-found: error + + maestro-cloud: + name: Maestro test suite + runs-on: ubuntu-latest + needs: build-apk + if: github.event_name == 'workflow_dispatch' || github.event.label.name == 'Run-Maestro' + # Allow one per PR. + concurrency: + group: ${{ format('maestro-{0}', github.ref) }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v4 + if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch' + with: + # Ensure we are building the branch and not the branch after being merged on develop + # https://github.com/actions/checkout/issues/881 + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.ref }} + - name: Download APK artifact from previous job + uses: actions/download-artifact@v4 + with: + name: elementx-apk-maestro - uses: mobile-dev-inc/action-maestro-cloud@v1.8.1 if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch' with: api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }} # Doc says (https://github.com/mobile-dev-inc/action-maestro-cloud#android): # app-file should point to an x86 compatible APK file, so upload the x86_64 one (much smaller than the universal APK). - app-file: app/build/outputs/apk/gplay/debug/app-gplay-x86_64-debug.apk + app-file: app-gplay-x86_64-debug.apk env: | MAESTRO_USERNAME=maestroelement MAESTRO_PASSWORD=${{ secrets.MATRIX_MAESTRO_ACCOUNT_PASSWORD }} From 83a22c7b09ea1d3d7b9de3b6c8be11eb661aafcf Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 9 May 2024 14:22:46 +0200 Subject: [PATCH 280/289] Amend `v0.4.9` changelog entry. (#2826) It was missing a security fix item. --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 38cb6e72cc..409f5fdd66 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,6 +19,10 @@ Changes in Element X v0.4.9 (2024-04-12) ======================================== - Synchronize Localazy Strings. + +Security +---------- +- Fix crash while processing a room message containing a malformed pill. Changes in Element X v0.4.8 (2024-04-10) ======================================== From 2f19f57aa335ea04d6b668d02fe54a72e7019da6 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 9 May 2024 16:39:59 +0200 Subject: [PATCH 281/289] Make logs less verbose, especially for sliding sync (#2825) * Make logs less verbose, especially for sliding sync. Use the same config as iOS for most targets. * Make sure we don't try to upload logs that are larger than the max request size of the bug reporter server. * Display the loading state as soon as the bug reporter starts processing the log files * Add changelog --- .../android/appconfig/ApplicationConfig.kt | 5 +++++ changelog.d/2825.bugfix | 1 + features/rageshake/impl/build.gradle.kts | 1 + .../impl/bugreport/BugReportPresenter.kt | 1 + .../impl/reporter/DefaultBugReporter.kt | 18 +++++++++++++----- .../api/tracing/TracingFilterConfiguration.kt | 6 +++--- 6 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 changelog.d/2825.bugfix diff --git a/appconfig/src/main/kotlin/io/element/android/appconfig/ApplicationConfig.kt b/appconfig/src/main/kotlin/io/element/android/appconfig/ApplicationConfig.kt index 21af158ad6..e8a8a2b33a 100644 --- a/appconfig/src/main/kotlin/io/element/android/appconfig/ApplicationConfig.kt +++ b/appconfig/src/main/kotlin/io/element/android/appconfig/ApplicationConfig.kt @@ -40,4 +40,9 @@ object ApplicationConfig { * For Element, the value is "Element". We use the same name for desktop and mobile for now. */ const val DESKTOP_APPLICATION_NAME: String = "Element" + + /** + * The maximum size of the upload request. Default value is just below CloudFlare's max request size. + */ + const val MAX_LOG_UPLOAD_SIZE = 50 * 1024 * 1024L } diff --git a/changelog.d/2825.bugfix b/changelog.d/2825.bugfix new file mode 100644 index 0000000000..786464f40d --- /dev/null +++ b/changelog.d/2825.bugfix @@ -0,0 +1 @@ +Make log less verbose, make sure we upload as many log files as possible before reaching the request size limit of the bug reporting service, discard older logs if they don't fit. diff --git a/features/rageshake/impl/build.gradle.kts b/features/rageshake/impl/build.gradle.kts index fdc8e803f7..6ac0776d0a 100644 --- a/features/rageshake/impl/build.gradle.kts +++ b/features/rageshake/impl/build.gradle.kts @@ -38,6 +38,7 @@ anvil { dependencies { implementation(projects.anvilannotations) anvil(projects.anvilcodegen) + implementation(projects.appconfig) implementation(projects.services.toolbox.api) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt index 1fd8526458..5eeb078275 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt @@ -96,6 +96,7 @@ class BugReportPresenter @Inject constructor( if (formState.value.description.length < 10) { sendingAction.value = AsyncAction.Failure(BugReportFormError.DescriptionTooShort) } else { + sendingAction.value = AsyncAction.Loading appCoroutineScope.sendBugReport(formState.value, crashInfo.isNotEmpty(), uploadListener) } } diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt index f81a755bd0..468d9bc1f4 100755 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt @@ -21,6 +21,7 @@ import android.os.Build import androidx.core.net.toFile import androidx.core.net.toUri import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.appconfig.ApplicationConfig import io.element.android.features.rageshake.api.crash.CrashDataStore import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.features.rageshake.api.reporter.BugReporterListener @@ -83,7 +84,6 @@ class DefaultBugReporter @Inject constructor( // filenames private const val LOG_CAT_FILENAME = "logcat.log" private const val LOG_DIRECTORY_NAME = "logs" - private const val BUFFER_SIZE = 1024 * 1024 * 50 } // the pending bug report call @@ -120,7 +120,7 @@ class DefaultBugReporter @Inject constructor( val gzippedFiles = ArrayList() if (withDevicesLogs) { - val files = getLogFiles() + val files = getLogFiles().sortedByDescending { it.lastModified() } files.mapNotNullTo(gzippedFiles) { f -> when { isCancelled -> null @@ -135,7 +135,7 @@ class DefaultBugReporter @Inject constructor( saveLogCat() val gzippedLogcat = compressFile(logCatErrFile) if (null != gzippedLogcat) { - if (gzippedFiles.size == 0) { + if (gzippedFiles.isEmpty()) { gzippedFiles.add(gzippedLogcat) } else { gzippedFiles.add(0, gzippedLogcat) @@ -166,10 +166,18 @@ class DefaultBugReporter @Inject constructor( } // add the gzipped files, don't cancel the whole upload if only some file failed to upload + var totalUploadedSize = 0L var uploadedSomeLogs = false for (file in gzippedFiles) { try { - builder.addFormDataPart("compressed-log", file.name, file.asRequestBody(MimeTypes.OctetStream.toMediaTypeOrNull())) + val requestBody = file.asRequestBody(MimeTypes.OctetStream.toMediaTypeOrNull()) + totalUploadedSize += requestBody.contentLength() + // If we are about to upload more than the max request size, stop here + if (totalUploadedSize > ApplicationConfig.MAX_LOG_UPLOAD_SIZE) { + Timber.e("Could not upload file ${file.name} because it would exceed the max request size") + break + } + builder.addFormDataPart("compressed-log", file.name, requestBody) uploadedSomeLogs = true } catch (e: CancellationException) { throw e @@ -411,7 +419,7 @@ class DefaultBugReporter @Inject constructor( val separator = System.getProperty("line.separator") logcatProc.inputStream .reader() - .buffered(BUFFER_SIZE) + .buffered(ApplicationConfig.MAX_LOG_UPLOAD_SIZE.toInt()) .forEachLine { line -> streamWriter.append(line) streamWriter.append(separator) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/tracing/TracingFilterConfiguration.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/tracing/TracingFilterConfiguration.kt index 222017255a..84d4d61da5 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/tracing/TracingFilterConfiguration.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/tracing/TracingFilterConfiguration.kt @@ -27,9 +27,9 @@ data class TracingFilterConfiguration( Target.MATRIX_SDK_CRYPTO to LogLevel.DEBUG, Target.MATRIX_SDK_CRYPTO_ACCOUNT to LogLevel.TRACE, Target.MATRIX_SDK_HTTP_CLIENT to LogLevel.DEBUG, - Target.MATRIX_SDK_SLIDING_SYNC to LogLevel.TRACE, - Target.MATRIX_SDK_BASE_SLIDING_SYNC to LogLevel.TRACE, - Target.MATRIX_SDK_UI_TIMELINE to LogLevel.TRACE, + Target.MATRIX_SDK_SLIDING_SYNC to LogLevel.INFO, + Target.MATRIX_SDK_BASE_SLIDING_SYNC to LogLevel.INFO, + Target.MATRIX_SDK_UI_TIMELINE to LogLevel.INFO, ) fun getLogLevel(target: Target): LogLevel { From b95df7e6b4c30dcb6efbf7ddba3bfb5c6181bcf1 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Fri, 10 May 2024 11:31:18 +0200 Subject: [PATCH 282/289] Remove join button on room directory search (#2827) * Remove 'Join' button in room directory search results * Update screenshots * Add changelog --------- Co-authored-by: ElementBot --- changelog.d/2827.bugfix | 1 + .../impl/root/RoomDirectoryView.kt | 37 +++---------------- .../impl/root/RoomDirectoryViewTest.kt | 15 -------- ...oryView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 4 +- ...oryView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 +- ...oryView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 4 +- ...oryView-Day-0_1_null_4,NEXUS_5,1.0,en].png | 4 +- ...yView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 4 +- ...yView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 +- ...yView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 4 +- ...yView-Night-0_2_null_4,NEXUS_5,1.0,en].png | 4 +- 11 files changed, 22 insertions(+), 63 deletions(-) create mode 100644 changelog.d/2827.bugfix diff --git a/changelog.d/2827.bugfix b/changelog.d/2827.bugfix new file mode 100644 index 0000000000..47539e279d --- /dev/null +++ b/changelog.d/2827.bugfix @@ -0,0 +1 @@ +Remove 'Join' button in room directory search results. diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt index d6eeb65d7c..a79f0d6e70 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt @@ -21,12 +21,10 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items @@ -76,10 +74,6 @@ fun RoomDirectoryView( onBackPressed: () -> Unit, modifier: Modifier = Modifier, ) { - fun joinRoom(roomDescription: RoomDescription) { - state.eventSink(RoomDirectoryEvents.JoinRoom(roomDescription.roomId)) - } - Scaffold( modifier = modifier, topBar = { @@ -89,7 +83,6 @@ fun RoomDirectoryView( RoomDirectoryContent( state = state, onResultClicked = onResultClicked, - onJoinClicked = ::joinRoom, modifier = Modifier .padding(padding) .consumeWindowInsets(padding) @@ -132,7 +125,6 @@ private fun RoomDirectoryTopBar( private fun RoomDirectoryContent( state: RoomDirectoryState, onResultClicked: (RoomDescription) -> Unit, - onJoinClicked: (RoomDescription) -> Unit, modifier: Modifier = Modifier, ) { Column(modifier = modifier) { @@ -147,7 +139,6 @@ private fun RoomDirectoryContent( displayLoadMoreIndicator = state.displayLoadMoreIndicator, displayEmptyState = state.displayEmptyState, onResultClicked = onResultClicked, - onJoinClicked = onJoinClicked, onReachedLoadMore = { state.eventSink(RoomDirectoryEvents.LoadMore) }, ) } @@ -159,7 +150,6 @@ private fun RoomDirectoryRoomList( displayLoadMoreIndicator: Boolean, displayEmptyState: Boolean, onResultClicked: (RoomDescription) -> Unit, - onJoinClicked: (RoomDescription) -> Unit, onReachedLoadMore: () -> Unit, modifier: Modifier = Modifier, ) { @@ -170,9 +160,6 @@ private fun RoomDirectoryRoomList( onClick = { onResultClicked(roomDescription) }, - onJoinClick = { - onJoinClicked(roomDescription) - }, ) } if (displayEmptyState) { @@ -199,10 +186,10 @@ private fun RoomDirectoryRoomList( @Composable private fun LoadMoreIndicator(modifier: Modifier = Modifier) { Box( - modifier - .fillMaxWidth() - .wrapContentHeight() - .padding(24.dp), + modifier + .fillMaxWidth() + .wrapContentHeight() + .padding(24.dp), contentAlignment = Alignment.Center, ) { CircularProgressIndicator( @@ -268,7 +255,6 @@ private fun SearchTextField( private fun RoomDirectoryRoomRow( roomDescription: RoomDescription, onClick: () -> Unit, - onJoinClick: () -> Unit, modifier: Modifier = Modifier, ) { Row( @@ -289,7 +275,7 @@ private fun RoomDirectoryRoomRow( Column( modifier = Modifier .weight(1f) - .padding(start = 16.dp) + .padding(horizontal = 16.dp) ) { Text( text = roomDescription.computedName, @@ -306,19 +292,6 @@ private fun RoomDirectoryRoomRow( overflow = TextOverflow.Ellipsis, ) } - if (roomDescription.canJoinOrKnock) { - Text( - text = stringResource(id = CommonStrings.action_join), - color = ElementTheme.colors.textSuccessPrimary, - modifier = Modifier - .align(Alignment.CenterVertically) - .clickable(onClick = onJoinClick) - .padding(start = 4.dp, end = 12.dp) - .testTag(TestTags.callToAction.value) - ) - } else { - Spacer(modifier = Modifier.width(24.dp)) - } } } diff --git a/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryViewTest.kt b/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryViewTest.kt index ce949250f0..2535f6f421 100644 --- a/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryViewTest.kt +++ b/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryViewTest.kt @@ -19,8 +19,6 @@ package io.element.android.features.roomdirectory.impl.root import androidx.activity.ComponentActivity import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule -import androidx.compose.ui.test.onAllNodesWithTag -import androidx.compose.ui.test.onFirst import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -74,19 +72,6 @@ class RoomDirectoryViewTest { } } - @Test - fun `clicking on room item join cta emits the expected Event`() { - val eventsRecorder = EventsRecorder() - val state = aRoomDirectoryState( - roomDescriptions = aRoomDescriptionList(), - eventSink = eventsRecorder, - ) - rule.setRoomDirectoryView(state = state) - val clickedRoom = state.roomDescriptions.first() - rule.onAllNodesWithTag(TestTags.callToAction.value).onFirst().performClick() - eventsRecorder.assertSingle(RoomDirectoryEvents.JoinRoom(clickedRoom.roomId)) - } - @Test fun `composing load more indicator emits expected Event`() { val eventsRecorder = EventsRecorder() diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en].png index 8d0538f792..479370e0de 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2b6cc7995880af654439c4f45d6e3ff35ff9c92609ad136fcdfbb2050edea44 -size 30484 +oid sha256:a4a3c37b862e1fe356c867cd5b78dd8348ac8bc91706d4cad745978806eca3cb +size 30510 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en].png index 158c2f7cf5..8fbda8e0db 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f7885c0ee25d12dc5bb25940b35e7153f95ffc35cbe6fac21839390d52faeac -size 32326 +oid sha256:769be0527952dc2b5da597cf91b08a173a6be8b8563ddcdbb5c8c571f5fb3d8d +size 32341 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en].png index c77504c186..4386d15a2d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:776d8f8a15bac930896a8baaf46f69fddf24fdf5c51c1ab6f1bbc48ef89259d6 -size 31607 +oid sha256:b717801c585a4a95f9d52984758d5d249a8f47a0a495c47b7300c8f440e0e1a9 +size 31641 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en].png index 0eb807db6d..5a5947dffc 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b349aa0ce78db6396094adda401f52133c32c16e695a051ba115be0143c31de9 -size 34972 +oid sha256:e26380664b3d36f1be969f7bea8ec3ca8d053866d52e156fe6fa30767157e6a9 +size 35034 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en].png index 1ee85c5f13..6666fd266e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a7b5c11dbc45a804d34a0105c49c7bd15ab1f5d6441f0e95dba84fd8a9eada6 -size 29080 +oid sha256:f4627bd990bd848e7b56fb1178e5bbc76b3c99fd3dfe4dd3e9aa4597dc584384 +size 29180 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en].png index 80d7eb5d17..a7ab79a524 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6af6d92766e7249ee95582a32ac17ddd5c3bcc29c9b78d9ba9ca6bcb27b69c8c -size 30828 +oid sha256:d3770d6c9677f4ff9d671dee6bbd9690d37d0faaf2971aa681f25f26f7565bea +size 30927 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en].png index 34fa07061a..0277d65597 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b434b666666da81963d8ac89e9669f059443cd529103735944e6a15ba5ba46b5 -size 28646 +oid sha256:4bb5a5d3c9db11646da18b83e7eaf8503db6e5fe125beb22e7b1651e41d1b9e1 +size 28868 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en].png index cbf54de729..dc08bed121 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdirectory.impl.root_RoomDirectoryView_null_RoomDirectoryView-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0190f4e7d06f5b46147531d7224e24662e0a7ef6289d516cf082d59ab63627f -size 31342 +oid sha256:f5184c8c53c2943925af714cba4528133352b8dcde1051f9d00957e4e9beb20a +size 31553 From 1f4b2d3ef3a11d11625ba40d797257fdb4dfd4cc Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Fri, 10 May 2024 12:15:33 +0200 Subject: [PATCH 283/289] Upload app id and clean version to bug reports (#2829) * Upload app id and clean version to bug reports * Add changelog --- changelog.d/2829.bugfix | 1 + .../features/rageshake/impl/reporter/DefaultBugReporter.kt | 3 +++ .../features/rageshake/impl/reporter/DefaultBugReporterTest.kt | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 changelog.d/2829.bugfix diff --git a/changelog.d/2829.bugfix b/changelog.d/2829.bugfix new file mode 100644 index 0000000000..203af1f361 --- /dev/null +++ b/changelog.d/2829.bugfix @@ -0,0 +1 @@ +Add missing `app_id` and `Version` properties to bug reports. diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt index 468d9bc1f4..295fa17563 100755 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt @@ -161,6 +161,9 @@ class DefaultBugReporter @Inject constructor( .addFormDataPart("sdk_sha", sdkMetadata.sdkGitSha) .addFormDataPart("local_time", LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME)) .addFormDataPart("utc_time", LocalDateTime.ofInstant(Instant.now(), ZoneOffset.UTC).format(DateTimeFormatter.ISO_DATE_TIME)) + .addFormDataPart("app_id", buildMeta.applicationId) + // Nightly versions have a custom version name suffix that we should remove for the bug report + .addFormDataPart("Version", buildMeta.versionName.replace("-nightly", "")) currentTracingFilter?.let { builder.addFormDataPart("tracing_filter", it) } diff --git a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt index 9d165ea844..f2c8d0d0a8 100755 --- a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt +++ b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt @@ -154,6 +154,6 @@ class DefaultBugReporterTest { } companion object { - private const val EXPECTED_NUMBER_OF_PROGRESS_VALUE = 15 + private const val EXPECTED_NUMBER_OF_PROGRESS_VALUE = 17 } } From 594d47ee0d17492e5afcc99268013b66a15f5050 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 13 May 2024 12:08:05 +0200 Subject: [PATCH 284/289] Use Python 3.12 to be able to use `match` structure. --- .github/workflows/generate_github_pages.yml | 4 ++-- .github/workflows/quality.yml | 4 ++-- .github/workflows/sync-localazy.yml | 4 ++-- .github/workflows/sync-sas-strings.yml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/generate_github_pages.yml b/.github/workflows/generate_github_pages.yml index 3780c7a87d..96f64eb1f7 100644 --- a/.github/workflows/generate_github_pages.yml +++ b/.github/workflows/generate_github_pages.yml @@ -22,10 +22,10 @@ jobs: uses: gradle/actions/setup-gradle@v3 with: cache-read-only: ${{ github.ref != 'refs/heads/develop' }} - - name: Set up Python 3.9 + - name: Set up Python 3.12 uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: 3.12 - name: Run World screenshots generation script run: | ./tools/test/generateWorldScreenshots.py diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 03650dd120..b62dbb0127 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -26,10 +26,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Set up Python 3.9 + - name: Set up Python 3.12 uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: 3.12 - name: Search for invalid screenshot files run: ./tools/test/checkInvalidScreenshots.py diff --git a/.github/workflows/sync-localazy.yml b/.github/workflows/sync-localazy.yml index 3b13fa6a77..c3f19da6ae 100644 --- a/.github/workflows/sync-localazy.yml +++ b/.github/workflows/sync-localazy.yml @@ -21,10 +21,10 @@ jobs: uses: gradle/actions/setup-gradle@v3 with: cache-read-only: ${{ github.ref != 'refs/heads/develop' }} - - name: Set up Python 3.9 + - name: Set up Python 3.12 uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: 3.12 - name: Setup Localazy run: | curl -sS https://dist.localazy.com/debian/pubkey.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/localazy.gpg diff --git a/.github/workflows/sync-sas-strings.yml b/.github/workflows/sync-sas-strings.yml index 79de1b7691..56336626c7 100644 --- a/.github/workflows/sync-sas-strings.yml +++ b/.github/workflows/sync-sas-strings.yml @@ -13,10 +13,10 @@ jobs: # No concurrency required, runs every time on a schedule. steps: - uses: actions/checkout@v4 - - name: Set up Python 3.9 + - name: Set up Python 3.12 uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: 3.12 - name: Install Prerequisite dependencies run: | pip install requests From 9a8519a3445ff0e94c24c34a0b8ab4b22bd47c60 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 13 May 2024 12:11:30 +0200 Subject: [PATCH 285/289] Add case for "zh#Hans". --- tools/localazy/importSupportedLocalesFromLocalazy.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/localazy/importSupportedLocalesFromLocalazy.py b/tools/localazy/importSupportedLocalesFromLocalazy.py index 15f0aed560..01f5045249 100755 --- a/tools/localazy/importSupportedLocalesFromLocalazy.py +++ b/tools/localazy/importSupportedLocalesFromLocalazy.py @@ -27,6 +27,8 @@ def normalizeForResourceConfigurations(locale): return "in" case "zh_TW#Hant": return "zh-rTW" + case "zh#Hans": + return "zh-rCN" case _: return locale @@ -37,6 +39,8 @@ def normalizeForLocalConfig(locale): return "in" case "zh_TW#Hant": return "zh-TW" + case "zh#Hans": + return "zh-CN" case _: return locale From c1b7f58a0e320aef343cab8712292eed6b1ab14c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 12:53:44 +0000 Subject: [PATCH 286/289] Update plugin ktlint to v12.1.1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b7edb0421d..f40a63efc8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -221,7 +221,7 @@ kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } anvil = { id = "com.squareup.anvil", version.ref = "anvil" } detekt = "io.gitlab.arturbosch.detekt:1.23.6" -ktlint = "org.jlleitschuh.gradle.ktlint:12.1.0" +ktlint = "org.jlleitschuh.gradle.ktlint:12.1.1" dependencygraph = "com.savvasdalkitsis.module-dependency-graph:0.12" dependencycheck = "org.owasp.dependencycheck:9.1.0" dependencyanalysis = { id = "com.autonomousapps.dependency-analysis", version.ref = "dependencyAnalysis" } From f2f96e0e0a6e687ac3fc86a013e083405a5aff44 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Mon, 13 May 2024 16:48:23 +0200 Subject: [PATCH 287/289] Bump Rust SDK to `v0.2.18` and bump app version (#2836) * Adapt to changes in SDK: - Remove name from MatrixRoom, we should use displayName instead. - Remove separate invites room list. - Added runBlocking to get the now async NotificationClient from the Rust SDK. - Made some other functions suspend. - Client.resolveRoomAlias now returns a roomId and via parameters, we pass the roomId. * Add logs removal migration again as `AppMigration03` to make sure we don't leak private data in existing logs. * Bump app version to `0.4.12` --- .../impl/migrations/AppMigration01.kt | 3 ++ .../impl/migrations/AppMigration02.kt | 4 +++ .../impl/migrations/AppMigration03.kt | 35 +++++++++++++++++++ .../impl/migrations/AppMigration03Test.kt | 33 +++++++++++++++++ .../roomdetails/impl/RoomDetailsPresenter.kt | 2 +- .../impl/edit/RoomDetailsEditPresenter.kt | 6 ++-- .../roomdetails/RoomDetailsPresenterTests.kt | 8 ++--- .../edit/RoomDetailsEditPresenterTest.kt | 34 +++++++++--------- gradle/libs.versions.toml | 2 +- .../libraries/matrix/api/room/MatrixRoom.kt | 1 - .../libraries/matrix/api/roomlist/RoomList.kt | 6 ++-- .../matrix/api/roomlist/RoomListService.kt | 5 --- .../libraries/matrix/impl/RustMatrixClient.kt | 10 ++---- .../matrix/impl/RustMatrixClientFactory.kt | 1 - .../matrix/impl/room/MatrixRoomInfoMapper.kt | 2 +- .../matrix/impl/room/RustMatrixRoom.kt | 3 -- .../impl/roomlist/RoomListExtensions.kt | 2 +- .../roomlist/RoomSummaryDetailsFactory.kt | 2 +- .../impl/roomlist/RustRoomListService.kt | 8 ----- .../matrix/impl/timeline/RustTimeline.kt | 2 +- .../roomlist/RoomSummaryListProcessorTests.kt | 6 +--- .../matrix/test/room/FakeMatrixRoom.kt | 1 - .../test/roomlist/FakeRoomListService.kt | 12 ------- plugins/src/main/kotlin/Versions.kt | 2 +- 24 files changed, 111 insertions(+), 79 deletions(-) create mode 100644 features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt create mode 100644 features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03Test.kt diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt index 91a89d7aa4..01514c530e 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt @@ -21,6 +21,9 @@ import io.element.android.features.rageshake.api.logs.LogFilesRemover import io.element.android.libraries.di.AppScope import javax.inject.Inject +/** + * Remove existing logs from the device to remove any leaks of sensitive data. + */ @ContributesMultibinding(AppScope::class) class AppMigration01 @Inject constructor( private val logFilesRemover: LogFilesRemover, diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt index 410a382ff3..c354300aa3 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt @@ -24,6 +24,10 @@ import io.element.android.libraries.sessionstorage.api.SessionStore import kotlinx.coroutines.coroutineScope import javax.inject.Inject +/** + * This migration sets the skip session verification preference to true for all existing sessions. + * This way we don't force existing users to verify their session again. + */ @ContributesMultibinding(AppScope::class) class AppMigration02 @Inject constructor( private val sessionStore: SessionStore, diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt new file mode 100644 index 0000000000..37eb59874e --- /dev/null +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl.migrations + +import com.squareup.anvil.annotations.ContributesMultibinding +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +/** + * This performs the same operation as [AppMigration01], since we need to clear the local logs again. + */ +@ContributesMultibinding(AppScope::class) +class AppMigration03 @Inject constructor( + private val migration01: AppMigration01, +) : AppMigration { + override val order: Int = 3 + + override suspend fun migrate() { + migration01.migrate() + } +} diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03Test.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03Test.kt new file mode 100644 index 0000000000..c9251bfe76 --- /dev/null +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03Test.kt @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.migration.impl.migrations + +import io.element.android.features.rageshake.test.logs.FakeLogFilesRemover +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class AppMigration03Test { + @Test + fun `test migration`() = runTest { + val logsFileRemover = FakeLogFilesRemover() + val migration = AppMigration03(migration01 = AppMigration01(logsFileRemover)) + + migration.migrate() + + logsFileRemover.performLambda.assertions().isCalledOnce() + } +} diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index 848b9edc43..966dade2c3 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -75,7 +75,7 @@ class RoomDetailsPresenter @Inject constructor( val roomAvatar by remember { derivedStateOf { roomInfo?.avatarUrl ?: room.avatarUrl } } - val roomName by remember { derivedStateOf { (roomInfo?.name ?: room.name ?: room.displayName).trim() } } + val roomName by remember { derivedStateOf { (roomInfo?.name ?: room.displayName).trim() } } val roomTopic by remember { derivedStateOf { roomInfo?.topic ?: room.topic } } val isFavorite by remember { derivedStateOf { roomInfo?.isFavorite.orFalse() } } val isPublic by remember { derivedStateOf { roomInfo?.isPublic.orFalse() } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt index 32f36a891b..6213f2cf1a 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt @@ -65,7 +65,7 @@ class RoomDetailsEditPresenter @Inject constructor( // just erase the local value when the room field has changed var roomAvatarUri by rememberSaveable(room.avatarUrl) { mutableStateOf(room.avatarUrl?.toUri()) } - var roomName by rememberSaveable { mutableStateOf((room.name ?: room.displayName).trim()) } + var roomName by rememberSaveable { mutableStateOf(room.displayName.trim()) } var roomTopic by rememberSaveable { mutableStateOf(room.topic?.trim()) } val saveButtonEnabled by remember( @@ -76,7 +76,7 @@ class RoomDetailsEditPresenter @Inject constructor( ) { derivedStateOf { roomAvatarUri?.toString()?.trim() != room.avatarUrl?.toUri()?.toString()?.trim() || - roomName.trim() != (room.name ?: room.displayName).trim() || + roomName.trim() != room.displayName.trim() || roomTopic.orEmpty().trim() != room.topic.orEmpty().trim() } } @@ -168,7 +168,7 @@ class RoomDetailsEditPresenter @Inject constructor( Timber.e(it, "Failed to set room topic") }) } - if (name.isNotEmpty() && name.trim() != room.name.orEmpty().trim()) { + if (name.isNotEmpty() && name.trim() != room.displayName.trim()) { results.add(room.setName(name).onFailure { Timber.e(it, "Failed to set room name") }) diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTests.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTests.kt index 8ce06e3835..998193690e 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTests.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTests.kt @@ -118,7 +118,7 @@ class RoomDetailsPresenterTests { presenter.test { val initialState = awaitItem() assertThat(initialState.roomId).isEqualTo(room.roomId) - assertThat(initialState.roomName).isEqualTo(room.name) + assertThat(initialState.roomName).isEqualTo(room.displayName) assertThat(initialState.roomAvatarUrl).isEqualTo(room.avatarUrl) assertThat(initialState.roomTopic).isEqualTo(RoomTopicState.ExistingTopic(room.topic!!)) assertThat(initialState.memberCount).isEqualTo(room.joinedMemberCount) @@ -148,7 +148,7 @@ class RoomDetailsPresenterTests { @Test fun `present - initial state with no room name`() = runTest { - val room = aMatrixRoom(name = null) + val room = aMatrixRoom(displayName = "") val presenter = createRoomDetailsPresenter(room) presenter.test { val initialState = awaitItem() @@ -476,8 +476,7 @@ class RoomDetailsPresenterTests { fun aMatrixRoom( roomId: RoomId = A_ROOM_ID, - name: String? = A_ROOM_NAME, - displayName: String = "A fallback display name", + displayName: String = A_ROOM_NAME, topic: String? = "A topic", avatarUrl: String? = "https://matrix.org/avatar.jpg", isEncrypted: Boolean = true, @@ -486,7 +485,6 @@ fun aMatrixRoom( notificationSettingsService: FakeNotificationSettingsService = FakeNotificationSettingsService() ) = FakeMatrixRoom( roomId = roomId, - name = name, displayName = displayName, topic = topic, avatarUrl = avatarUrl, diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditPresenterTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditPresenterTest.kt index f2f6f9b1b4..8b0dcd5b0a 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditPresenterTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditPresenterTest.kt @@ -98,7 +98,7 @@ class RoomDetailsEditPresenterTest { }.test { val initialState = awaitItem() assertThat(initialState.roomId).isEqualTo(room.roomId.value) - assertThat(initialState.roomName).isEqualTo(room.name) + assertThat(initialState.roomName).isEqualTo(room.displayName) assertThat(initialState.roomAvatarUrl).isEqualTo(roomAvatarUri) assertThat(initialState.roomTopic).isEqualTo(room.topic.orEmpty()) assertThat(initialState.avatarActions).containsExactly( @@ -191,7 +191,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - updates state in response to changes`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) val presenter = createRoomDetailsEditPresenter(room) moleculeFlow(RecompositionMode.Immediate) { @@ -234,7 +234,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - obtains avatar uris from gallery`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) fakePickerProvider.givenResult(anotherAvatarUri) @@ -255,7 +255,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - obtains avatar uris from camera`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) fakePickerProvider.givenResult(anotherAvatarUri) val fakePermissionsPresenter = FakePermissionsPresenter() @@ -288,7 +288,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - updates save button state`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) fakePickerProvider.givenResult(roomAvatarUri) @@ -340,7 +340,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - updates save button state when initial values are null`() = runTest { - val room = aMatrixRoom(topic = null, name = null, displayName = "fallback", avatarUrl = null) + val room = aMatrixRoom(topic = null, displayName = "fallback", avatarUrl = null) fakePickerProvider.givenResult(roomAvatarUri) @@ -392,7 +392,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - save changes room details if different`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) val presenter = createRoomDetailsEditPresenter(room) @@ -417,7 +417,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - save doesn't change room details if they're the same trimmed`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) val presenter = createRoomDetailsEditPresenter(room) @@ -441,7 +441,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - save doesn't change topic if it was unset and is now blank`() = runTest { - val room = aMatrixRoom(topic = null, name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = null, displayName = "Name", avatarUrl = AN_AVATAR_URL) val presenter = createRoomDetailsEditPresenter(room) @@ -464,7 +464,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - save doesn't change name if it's now empty`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) val presenter = createRoomDetailsEditPresenter(room) @@ -487,7 +487,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - save processes and sets avatar when processor returns successfully`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) givenPickerReturnsFile() @@ -511,7 +511,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - save does not set avatar data if processor fails`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL) + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL) fakePickerProvider.givenResult(anotherAvatarUri) fakeMediaPreProcessor.givenResult(Result.failure(Throwable("Oh no"))) @@ -538,7 +538,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - sets save action to failure if name update fails`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL).apply { + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL).apply { givenSetNameResult(Result.failure(Throwable("!"))) } @@ -547,7 +547,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - sets save action to failure if topic update fails`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL).apply { + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL).apply { givenSetTopicResult(Result.failure(Throwable("!"))) } @@ -556,7 +556,7 @@ class RoomDetailsEditPresenterTest { @Test fun `present - sets save action to failure if removing avatar fails`() = runTest { - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL).apply { + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL).apply { givenRemoveAvatarResult(Result.failure(Throwable("!"))) } @@ -567,7 +567,7 @@ class RoomDetailsEditPresenterTest { fun `present - sets save action to failure if setting avatar fails`() = runTest { givenPickerReturnsFile() - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL).apply { + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL).apply { givenUpdateAvatarResult(Result.failure(Throwable("!"))) } @@ -578,7 +578,7 @@ class RoomDetailsEditPresenterTest { fun `present - CancelSaveChanges resets save action state`() = runTest { givenPickerReturnsFile() - val room = aMatrixRoom(topic = "My topic", name = "Name", avatarUrl = AN_AVATAR_URL).apply { + val room = aMatrixRoom(topic = "My topic", displayName = "Name", avatarUrl = AN_AVATAR_URL).apply { givenSetTopicResult(Result.failure(Throwable("!"))) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b7edb0421d..aabf5cebfa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -159,7 +159,7 @@ jsoup = "org.jsoup:jsoup:1.17.2" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:1.4.2" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.16" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.18" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 33cd86c005..a4619635c6 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -44,7 +44,6 @@ import java.io.File interface MatrixRoom : Closeable { val sessionId: SessionId val roomId: RoomId - val name: String? val displayName: String val alias: RoomAlias? val alternativeAliases: List diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomList.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomList.kt index 1af22cd4c8..85e3351089 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomList.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomList.kt @@ -39,14 +39,12 @@ interface RoomList { /** * The source of the room list data. - * All: all rooms except invites. - * Invites: only invites. + * All: all rooms. * * To apply some dynamic filtering on top of that, use [DynamicRoomList]. */ enum class Source { - All, - Invites, + All } /** diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListService.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListService.kt index 95992b965e..dc8e0988e4 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListService.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListService.kt @@ -59,11 +59,6 @@ interface RoomListService { */ val allRooms: DynamicRoomList - /** - * returns a [RoomList] object of all invites. - */ - val invites: RoomList - /** * Will set the visible range of all rooms. * This is useful to load more data when the user scrolls down. diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 91036df1cc..7b6ec13268 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -96,6 +96,7 @@ import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeout import org.matrix.rustcomponents.sdk.BackupState @@ -145,12 +146,7 @@ class RustMatrixClient( dispatchers = dispatchers, ) private val notificationProcessSetup = NotificationProcessSetup.SingleProcess(syncService) - private val notificationClient = client.notificationClient(notificationProcessSetup) - .use { builder -> - builder - .filterByPushRules() - .finish() - } + private val notificationClient = runBlocking { client.notificationClient(notificationProcessSetup) } private val notificationService = RustNotificationService(sessionId, notificationClient, dispatchers, clock) private val notificationSettingsService = RustNotificationSettingsService(client, dispatchers) .apply { start() } @@ -465,7 +461,7 @@ class RustMatrixClient( override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = withContext(sessionDispatcher) { runCatching { - client.resolveRoomAlias(roomAlias.value).let(::RoomId) + client.resolveRoomAlias(roomAlias.value).roomId.let(::RoomId) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt index fefec384dd..80302933d5 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt @@ -71,7 +71,6 @@ class RustMatrixClientFactory @Inject constructor( val syncService = client.syncService() .withUtdHook(utdTracker) - .withUnifiedInvitesInRoomList(true) .finish() RustMatrixClient( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt index d3ef3283bd..3fe4dcf1b7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt @@ -38,7 +38,7 @@ class MatrixRoomInfoMapper( fun map(rustRoomInfo: RustRoomInfo): MatrixRoomInfo = rustRoomInfo.use { return MatrixRoomInfo( id = RoomId(it.id), - name = it.name, + name = it.displayName, topic = it.topic, avatarUrl = it.avatarUrl, isDirect = it.isDirect, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 1fe5d78627..93720df55c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -191,9 +191,6 @@ class RustMatrixRoom( roomListItem.destroy() } - override val name: String? - get() = runCatching { roomListItem.name() }.getOrDefault(null) - override val displayName: String get() = runCatching { innerRoom.displayName() }.getOrDefault("") diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListExtensions.kt index 79ea6b17e0..8094f0bee7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListExtensions.kt @@ -126,7 +126,7 @@ internal fun RoomListServiceInterface.syncIndicator(): Flow innerRoomListService.allRooms() - RoomList.Source.Invites -> innerRoomListService.invites() } } } @@ -70,13 +69,6 @@ internal class RustRoomListService( innerRoomListService.allRooms() } - override val invites: RoomList = roomListFactory.createRoomList( - pageSize = Int.MAX_VALUE, - coroutineContext = sessionDispatcher, - ) { - innerRoomListService.invites() - } - init { allRooms.loadAllIncrementally(sessionCoroutineScope) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 3ec21e7560..fb051e7a35 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -515,7 +515,7 @@ class RustTimeline( } } - private fun fetchDetailsForEvent(eventId: EventId): Result { + private suspend fun fetchDetailsForEvent(eventId: EventId): Result { return runCatching { inner.fetchDetailsForEvent(eventId.value) } diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTests.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTests.kt index 3812605546..6442987770 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTests.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTests.kt @@ -170,11 +170,7 @@ class RoomSummaryListProcessorTests { override suspend fun applyInput(input: RoomListInput) = Unit - override suspend fun invites(): RoomList { - return RoomList(Pointer.NULL) - } - - override fun room(roomId: String): RoomListItem { + override suspend fun room(roomId: String): RoomListItem { return RoomListItem(Pointer.NULL) } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index a435a7a4ca..fff0ce8247 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -70,7 +70,6 @@ import java.io.File class FakeMatrixRoom( override val sessionId: SessionId = A_SESSION_ID, override val roomId: RoomId = A_ROOM_ID, - override val name: String? = null, override val displayName: String = "", override val topic: String? = null, override val avatarUrl: String? = null, diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/roomlist/FakeRoomListService.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/roomlist/FakeRoomListService.kt index 5de62272d3..4b8da511d0 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/roomlist/FakeRoomListService.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/roomlist/FakeRoomListService.kt @@ -28,7 +28,6 @@ class FakeRoomListService : RoomListService { private val allRoomSummariesFlow = MutableStateFlow>(emptyList()) private val inviteRoomSummariesFlow = MutableStateFlow>(emptyList()) private val allRoomsLoadingStateFlow = MutableStateFlow(RoomList.LoadingState.NotLoaded) - private val inviteRoomsLoadingStateFlow = MutableStateFlow(RoomList.LoadingState.NotLoaded) private val roomListStateFlow = MutableStateFlow(RoomListService.State.Idle) private val syncIndicatorStateFlow = MutableStateFlow(RoomListService.SyncIndicator.Hide) @@ -44,10 +43,6 @@ class FakeRoomListService : RoomListService { allRoomsLoadingStateFlow.emit(loadingState) } - suspend fun postInviteRoomsLoadingState(loadingState: RoomList.LoadingState) { - inviteRoomsLoadingStateFlow.emit(loadingState) - } - suspend fun postState(state: RoomListService.State) { roomListStateFlow.emit(state) } @@ -66,7 +61,6 @@ class FakeRoomListService : RoomListService { ): DynamicRoomList { return when (source) { RoomList.Source.All -> allRooms - RoomList.Source.Invites -> invites } } @@ -76,12 +70,6 @@ class FakeRoomListService : RoomListService { MutableStateFlow(RoomListFilter.all()) ) - override val invites = SimplePagedRoomList( - inviteRoomSummariesFlow, - inviteRoomsLoadingStateFlow, - MutableStateFlow(RoomListFilter.all()) - ) - override fun updateAllRoomsVisibleRange(range: IntRange) { latestSlidingSyncRange = range } diff --git a/plugins/src/main/kotlin/Versions.kt b/plugins/src/main/kotlin/Versions.kt index ad430d9a44..a44140f9b2 100644 --- a/plugins/src/main/kotlin/Versions.kt +++ b/plugins/src/main/kotlin/Versions.kt @@ -56,7 +56,7 @@ private const val versionMinor = 4 // Note: even values are reserved for regular release, odd values for hotfix release. // When creating a hotfix, you should decrease the value, since the current value // is the value for the next regular release. -private const val versionPatch = 11 +private const val versionPatch = 12 object Versions { val versionCode = 4_000_000 + versionMajor * 1_00_00 + versionMinor * 1_00 + versionPatch From 298c33248452bc961f1294663106a6f73850fff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 13 May 2024 17:33:23 +0200 Subject: [PATCH 288/289] Changelog for version 0.4.12 --- CHANGES.md | 544 +++++++++++++++++++++------------------ changelog.d/2718.bugfix | 1 - changelog.d/2721.misc | 1 - changelog.d/2740.bugfix | 1 - changelog.d/2749.misc | 1 - changelog.d/2754.feature | 1 - changelog.d/2758.misc | 1 - changelog.d/2759.feature | 1 - changelog.d/2760.bugfix | 1 - changelog.d/2761.bugfix | 1 - changelog.d/2771.feature | 1 - changelog.d/2776.feature | 1 - changelog.d/2778.bugfix | 1 - changelog.d/2795.feature | 1 - changelog.d/2801.misc | 1 - changelog.d/2806.misc | 1 - changelog.d/2810.bugfix | 1 - changelog.d/2814.misc | 1 - changelog.d/2818.misc | 1 - changelog.d/2822.misc | 1 - changelog.d/2825.bugfix | 1 - changelog.d/2827.bugfix | 1 - changelog.d/2829.bugfix | 1 - 23 files changed, 291 insertions(+), 275 deletions(-) delete mode 100644 changelog.d/2718.bugfix delete mode 100644 changelog.d/2721.misc delete mode 100644 changelog.d/2740.bugfix delete mode 100644 changelog.d/2749.misc delete mode 100644 changelog.d/2754.feature delete mode 100644 changelog.d/2758.misc delete mode 100644 changelog.d/2759.feature delete mode 100644 changelog.d/2760.bugfix delete mode 100644 changelog.d/2761.bugfix delete mode 100644 changelog.d/2771.feature delete mode 100644 changelog.d/2776.feature delete mode 100644 changelog.d/2778.bugfix delete mode 100644 changelog.d/2795.feature delete mode 100644 changelog.d/2801.misc delete mode 100644 changelog.d/2806.misc delete mode 100644 changelog.d/2810.bugfix delete mode 100644 changelog.d/2814.misc delete mode 100644 changelog.d/2818.misc delete mode 100644 changelog.d/2822.misc delete mode 100644 changelog.d/2825.bugfix delete mode 100644 changelog.d/2827.bugfix delete mode 100644 changelog.d/2829.bugfix diff --git a/CHANGES.md b/CHANGES.md index 409f5fdd66..d091404139 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,41 @@ +Changes in Element X v0.4.12 (2024-05-13) +========================================= + +Features ✨ +---------- +- Add support for expected decryption errors due to membership (UX and analytics). ([#2754](https://github.com/element-hq/element-x-android/issues/2754)) +- Handle permalink navigation to Events. ([#2759](https://github.com/element-hq/element-x-android/issues/2759)) +- Pretty-print event JSON in debug viewer ([#2771](https://github.com/element-hq/element-x-android/issues/2771)) +- Add support for external permalinks. ([#2776](https://github.com/element-hq/element-x-android/issues/2776)) +- Enable support for Android per-app language preferences ([#2795](https://github.com/element-hq/element-x-android/issues/2795)) + +Bugfixes 🐛 +---------- +- Fix session verification being asked again for already verified users. ([#2718](https://github.com/element-hq/element-x-android/issues/2718)) +- Instead of displaying 'create new recovery key' on the session verification screen when there is no other session active, display it always under the 'enter recovery key' screen. ([#2740](https://github.com/element-hq/element-x-android/issues/2740)) +- Adjust the typography used in the selected user component so a user's display name fits better. ([#2760](https://github.com/element-hq/element-x-android/issues/2760)) +- User display name overflows in timeline messages when it's way too long. ([#2761](https://github.com/element-hq/element-x-android/issues/2761)) +- Ensure the application open the room when a notification is clicked. ([#2778](https://github.com/element-hq/element-x-android/issues/2778)) +- Enforce mandatory session verification only for new logins. ([#2810](https://github.com/element-hq/element-x-android/issues/2810)) +- Make log less verbose, make sure we upload as many log files as possible before reaching the request size limit of the bug reporting service, discard older logs if they don't fit. ([#2825](https://github.com/element-hq/element-x-android/issues/2825)) +- Remove 'Join' button in room directory search results. ([#2827](https://github.com/element-hq/element-x-android/issues/2827)) +- Add missing `app_id` and `Version` properties to bug reports. ([#2829](https://github.com/element-hq/element-x-android/issues/2829)) + +Other changes +------------- +- RoomMember screen: fallback to userProfile data, if the member is not a user of the room. ([#2721](https://github.com/element-hq/element-x-android/issues/2721)) +- Migrate application data. ([#2749](https://github.com/element-hq/element-x-android/issues/2749)) +- Let the SDK manage the file log cleanup, and keep one week of log. ([#2758](https://github.com/element-hq/element-x-android/issues/2758)) +- UX cleanup: reorder options in the main settings screen. ([#2801](https://github.com/element-hq/element-x-android/issues/2801)) +- Analytics: Add support to report current session verification and recovery state ([#2806](https://github.com/element-hq/element-x-android/issues/2806)) +- UX cleanup: room details screen, add new CTA buttons for Invite and Call actions. ([#2814](https://github.com/element-hq/element-x-android/issues/2814)) +- UX cleanup: user profile. Move send DM to a call to action button, add 'Call' CTA too. ([#2818](https://github.com/element-hq/element-x-android/issues/2818)) +- Add room badges to room details screen. ([#2822](https://github.com/element-hq/element-x-android/issues/2822)) + +Security +------------- +- Bump the Rust SDK to `v0.2.18` to remediate [CVE-2024-34353 / GHSA-9ggc-845v-gcgv](https://github.com/matrix-org/matrix-rust-sdk/security/advisories/GHSA-9ggc-845v-gcgv). + Changes in Element X v0.4.10 (2024-04-17) ========================================= @@ -5,21 +43,21 @@ Matrix Rust SDK 0.2.14 Features ✨ ---------- - - Rework room navigation to handle unknown room and prepare work on permalink. ([#2695](https://github.com/element-hq/element-x-android/issues/2695)) +- Rework room navigation to handle unknown room and prepare work on permalink. ([#2695](https://github.com/element-hq/element-x-android/issues/2695)) Other changes ------------- - - Encrypt new session data with a passphrase ([#2703](https://github.com/element-hq/element-x-android/issues/2703)) - - Use sdk API to build permalinks ([#2708](https://github.com/element-hq/element-x-android/issues/2708)) - - Parse permalink using parseMatrixEntityFrom from the SDK ([#2709](https://github.com/element-hq/element-x-android/issues/2709)) - - Fix compile for forks that use the `noop` analytics module ([#2698](https://github.com/element-hq/element-x-android/issues/2698)) +- Encrypt new session data with a passphrase ([#2703](https://github.com/element-hq/element-x-android/issues/2703)) +- Use sdk API to build permalinks ([#2708](https://github.com/element-hq/element-x-android/issues/2708)) +- Parse permalink using parseMatrixEntityFrom from the SDK ([#2709](https://github.com/element-hq/element-x-android/issues/2709)) +- Fix compile for forks that use the `noop` analytics module ([#2698](https://github.com/element-hq/element-x-android/issues/2698)) Changes in Element X v0.4.9 (2024-04-12) ======================================== - Synchronize Localazy Strings. - + Security ---------- - Fix crash while processing a room message containing a malformed pill. @@ -29,26 +67,26 @@ Changes in Element X v0.4.8 (2024-04-10) Features ✨ ---------- - - Move session recovery to the login flow. ([#2579](https://github.com/element-hq/element-x-android/issues/2579)) - - Move session verification to the after login flow and make it mandatory. ([#2580](https://github.com/element-hq/element-x-android/issues/2580)) - - Add a notification troubleshoot screen ([#2601](https://github.com/element-hq/element-x-android/issues/2601)) - - Add action to copy permalink ([#2650](https://github.com/element-hq/element-x-android/issues/2650)) +- Move session recovery to the login flow. ([#2579](https://github.com/element-hq/element-x-android/issues/2579)) +- Move session verification to the after login flow and make it mandatory. ([#2580](https://github.com/element-hq/element-x-android/issues/2580)) +- Add a notification troubleshoot screen ([#2601](https://github.com/element-hq/element-x-android/issues/2601)) +- Add action to copy permalink ([#2650](https://github.com/element-hq/element-x-android/issues/2650)) Bugfixes 🐛 ---------- - - Fix analytics issue around room considered as space by mistake. ([#2612](https://github.com/element-hq/element-x-android/issues/2612)) - - Fix crash observed when going back to the room list. ([#2619](https://github.com/element-hq/element-x-android/issues/2619)) - - Hide Event org.matrix.msc3401.call.member on the timeline. ([#2625](https://github.com/element-hq/element-x-android/issues/2625)) - - Fall back to name-based generated avatars when image avatars don't load. ([#2667](https://github.com/element-hq/element-x-android/issues/2667)) +- Fix analytics issue around room considered as space by mistake. ([#2612](https://github.com/element-hq/element-x-android/issues/2612)) +- Fix crash observed when going back to the room list. ([#2619](https://github.com/element-hq/element-x-android/issues/2619)) +- Hide Event org.matrix.msc3401.call.member on the timeline. ([#2625](https://github.com/element-hq/element-x-android/issues/2625)) +- Fall back to name-based generated avatars when image avatars don't load. ([#2667](https://github.com/element-hq/element-x-android/issues/2667)) Other changes ------------- - - Improve UI for notification permission screen in onboarding. ([#2581](https://github.com/element-hq/element-x-android/issues/2581)) - - Categorise members by role in change roles screen. ([#2593](https://github.com/element-hq/element-x-android/issues/2593)) - - Make completed poll more clearly visible ([#2608](https://github.com/element-hq/element-x-android/issues/2608)) - - Show users from last visited DM as suggestion when starting a Chat or when creating a Room. ([#2634](https://github.com/element-hq/element-x-android/issues/2634)) - - Enable room moderation feature. ([#2678](https://github.com/element-hq/element-x-android/issues/2678)) - - Improve analytics opt-in screen UI. ([#2684](https://github.com/element-hq/element-x-android/issues/2684)) +- Improve UI for notification permission screen in onboarding. ([#2581](https://github.com/element-hq/element-x-android/issues/2581)) +- Categorise members by role in change roles screen. ([#2593](https://github.com/element-hq/element-x-android/issues/2593)) +- Make completed poll more clearly visible ([#2608](https://github.com/element-hq/element-x-android/issues/2608)) +- Show users from last visited DM as suggestion when starting a Chat or when creating a Room. ([#2634](https://github.com/element-hq/element-x-android/issues/2634)) +- Enable room moderation feature. ([#2678](https://github.com/element-hq/element-x-android/issues/2678)) +- Improve analytics opt-in screen UI. ([#2684](https://github.com/element-hq/element-x-android/issues/2684)) Changes in Element X v0.4.7 (2024-03-26) @@ -56,19 +94,19 @@ Changes in Element X v0.4.7 (2024-03-26) Features ✨ ---------- - - Enable the feature "RoomList filters". ([#2603](https://github.com/element-hq/element-x-android/issues/2603)) - - Enable the feature "Mark as unread" ([#2261](https://github.com/element-hq/element-x-android/issues/2261)) - - Implement MSC2530 (Body field as media caption) ([#2521](https://github.com/element-hq/element-x-android/issues/2521)) +- Enable the feature "RoomList filters". ([#2603](https://github.com/element-hq/element-x-android/issues/2603)) +- Enable the feature "Mark as unread" ([#2261](https://github.com/element-hq/element-x-android/issues/2261)) +- Implement MSC2530 (Body field as media caption) ([#2521](https://github.com/element-hq/element-x-android/issues/2521)) Bugfixes 🐛 ---------- - - Use user avatar from cache if available. ([#2488](https://github.com/element-hq/element-x-android/issues/2488)) - - Update member list after changing member roles and when the room member list is opened. ([#2590](https://github.com/element-hq/element-x-android/issues/2590)) +- Use user avatar from cache if available. ([#2488](https://github.com/element-hq/element-x-android/issues/2488)) +- Update member list after changing member roles and when the room member list is opened. ([#2590](https://github.com/element-hq/element-x-android/issues/2590)) Other changes ------------- - - Compound: add `BigIcon`, `BigCheckmark` and `PageTitle` components. ([#2574](https://github.com/element-hq/element-x-android/issues/2574)) - - Remove Welcome screen from the FTUE. ([#2584](https://github.com/element-hq/element-x-android/issues/2584)) +- Compound: add `BigIcon`, `BigCheckmark` and `PageTitle` components. ([#2574](https://github.com/element-hq/element-x-android/issues/2574)) +- Remove Welcome screen from the FTUE. ([#2584](https://github.com/element-hq/element-x-android/issues/2584)) Changes in Element X v0.4.6 (2024-03-15) @@ -76,26 +114,26 @@ Changes in Element X v0.4.6 (2024-03-15) Features ✨ ---------- - - Admins can now change user roles in rooms. ([#2257](https://github.com/element-hq/element-x-android/issues/2257)) - - Room member moderation: remove, ban and unban users from a room. ([#2258](https://github.com/element-hq/element-x-android/issues/2258)) - - Change a room's permissions power levels. ([#2259](https://github.com/element-hq/element-x-android/issues/2259)) - - Add state timeline events and notifications for legacy call invites. ([#2485](https://github.com/element-hq/element-x-android/issues/2485)) +- Admins can now change user roles in rooms. ([#2257](https://github.com/element-hq/element-x-android/issues/2257)) +- Room member moderation: remove, ban and unban users from a room. ([#2258](https://github.com/element-hq/element-x-android/issues/2258)) +- Change a room's permissions power levels. ([#2259](https://github.com/element-hq/element-x-android/issues/2259)) +- Add state timeline events and notifications for legacy call invites. ([#2485](https://github.com/element-hq/element-x-android/issues/2485)) Bugfixes 🐛 ---------- - - Added empty state to banned member list. ([#+add-empty-state-to-banned-members-list](https://github.com/element-hq/element-x-android/issues/+add-empty-state-to-banned-members-list)) - - Prevent sending empty messages. ([#995](https://github.com/element-hq/element-x-android/issues/995)) - - Use the display name only once in display name change events. The user should be referenced by `userId` instead. ([#2125](https://github.com/element-hq/element-x-android/issues/2125)) - - Hide blocked users list when there are no blocked users. ([#2198](https://github.com/element-hq/element-x-android/issues/2198)) - - Fix timeline not showing sender info when room is marked as direct but not a 1:1 room. ([#2530](https://github.com/element-hq/element-x-android/issues/2530)) +- Added empty state to banned member list. ([#+add-empty-state-to-banned-members-list](https://github.com/element-hq/element-x-android/issues/+add-empty-state-to-banned-members-list)) +- Prevent sending empty messages. ([#995](https://github.com/element-hq/element-x-android/issues/995)) +- Use the display name only once in display name change events. The user should be referenced by `userId` instead. ([#2125](https://github.com/element-hq/element-x-android/issues/2125)) +- Hide blocked users list when there are no blocked users. ([#2198](https://github.com/element-hq/element-x-android/issues/2198)) +- Fix timeline not showing sender info when room is marked as direct but not a 1:1 room. ([#2530](https://github.com/element-hq/element-x-android/issues/2530)) Other changes ------------- - - Add `local_time`, `utc_time` and `sdk_sha` params to bug reports so they're easier to investigate. ([#+add-time-and-sdk-sha-params-to-bugreports](https://github.com/element-hq/element-x-android/issues/+add-time-and-sdk-sha-params-to-bugreports)) - - Improve room member list loading times, increase chunk size ([#2322](https://github.com/element-hq/element-x-android/issues/2322)) - - Improve room member list loading UX. ([#2452](https://github.com/element-hq/element-x-android/issues/2452)) - - Remove the special log level for the Rust SDK read receipts. ([#2511](https://github.com/element-hq/element-x-android/issues/2511)) - - Track UTD errors. ([#2544](https://github.com/element-hq/element-x-android/issues/2544)) +- Add `local_time`, `utc_time` and `sdk_sha` params to bug reports so they're easier to investigate. ([#+add-time-and-sdk-sha-params-to-bugreports](https://github.com/element-hq/element-x-android/issues/+add-time-and-sdk-sha-params-to-bugreports)) +- Improve room member list loading times, increase chunk size ([#2322](https://github.com/element-hq/element-x-android/issues/2322)) +- Improve room member list loading UX. ([#2452](https://github.com/element-hq/element-x-android/issues/2452)) +- Remove the special log level for the Rust SDK read receipts. ([#2511](https://github.com/element-hq/element-x-android/issues/2511)) +- Track UTD errors. ([#2544](https://github.com/element-hq/element-x-android/issues/2544)) Changes in Element X v0.4.5 (2024-02-28) @@ -103,22 +141,22 @@ Changes in Element X v0.4.5 (2024-02-28) Features ✨ ---------- - - Mark a room or dm as favourite. ([#2208](https://github.com/element-hq/element-x-android/issues/2208)) - - Add moderation to rooms: - - Sort member in room member list by powerlevel, display their roles. - - Display banner users in room member list for users with enough power level to ban/unban. ([#2256](https://github.com/element-hq/element-x-android/issues/2256)) - - MediaViewer : introduce fullscreen and flick to dismiss behavior. ([#2390](https://github.com/element-hq/element-x-android/issues/2390)) - - Allow user-installed certificates to be used by the HTTP client ([#2992](https://github.com/element-hq/element-x-android/issues/2992)) +- Mark a room or dm as favourite. ([#2208](https://github.com/element-hq/element-x-android/issues/2208)) +- Add moderation to rooms: + - Sort member in room member list by powerlevel, display their roles. + - Display banner users in room member list for users with enough power level to ban/unban. ([#2256](https://github.com/element-hq/element-x-android/issues/2256)) +- MediaViewer : introduce fullscreen and flick to dismiss behavior. ([#2390](https://github.com/element-hq/element-x-android/issues/2390)) +- Allow user-installed certificates to be used by the HTTP client ([#2992](https://github.com/element-hq/element-x-android/issues/2992)) Bugfixes 🐛 ---------- - - Do not display empty room list state before the loading one when we still don't have any items ([#+do-not-display-empty-state-before-loading-roomlist](https://github.com/element-hq/element-x-android/issues/+do-not-display-empty-state-before-loading-roomlist)) - - Improve how Talkback works with the timeline. Sadly, it's still not 100% working, but there is some issue with the `LazyColumn` using `reverseLayout` that only Google can fix. ([#+improve-accessibility-in-timeline](https://github.com/element-hq/element-x-android/issues/+improve-accessibility-in-timeline)) - - Add ability to enter a recovery key to verify the session. Also fixes some refresh issues with the verification session state. ([#2421](https://github.com/element-hq/element-x-android/issues/2421)) +- Do not display empty room list state before the loading one when we still don't have any items ([#+do-not-display-empty-state-before-loading-roomlist](https://github.com/element-hq/element-x-android/issues/+do-not-display-empty-state-before-loading-roomlist)) +- Improve how Talkback works with the timeline. Sadly, it's still not 100% working, but there is some issue with the `LazyColumn` using `reverseLayout` that only Google can fix. ([#+improve-accessibility-in-timeline](https://github.com/element-hq/element-x-android/issues/+improve-accessibility-in-timeline)) +- Add ability to enter a recovery key to verify the session. Also fixes some refresh issues with the verification session state. ([#2421](https://github.com/element-hq/element-x-android/issues/2421)) Other changes ------------- - - Provide the current system proxy setting to the Rust SDK. ([#2420](https://github.com/element-hq/element-x-android/issues/2420)) +- Provide the current system proxy setting to the Rust SDK. ([#2420](https://github.com/element-hq/element-x-android/issues/2420)) Changes in Element X v0.4.4 (2024-02-15) @@ -134,31 +172,31 @@ Changes in Element X v0.4.3 (2024-02-14) Features ✨ ---------- - - Change "Read receipts" advanced setting used to send private Read Receipt to "Share presence" settings. When disabled, private Read Receipts will be sent, and no typing notification will be sent. Also Read Receipts and typing notifications will not be rendered in the timeline. ([#2241](https://github.com/element-hq/element-x-android/issues/2241)) - - Render typing notifications. ([#2242](https://github.com/element-hq/element-x-android/issues/2242)) - - Manually mark a room as unread. ([#2261](https://github.com/element-hq/element-x-android/issues/2261)) - - Add empty state to the room list. ([#2330](https://github.com/element-hq/element-x-android/issues/2330)) - - Allow joining unencrypted video calls in non encrypted rooms. ([#2333](https://github.com/element-hq/element-x-android/issues/2333)) +- Change "Read receipts" advanced setting used to send private Read Receipt to "Share presence" settings. When disabled, private Read Receipts will be sent, and no typing notification will be sent. Also Read Receipts and typing notifications will not be rendered in the timeline. ([#2241](https://github.com/element-hq/element-x-android/issues/2241)) +- Render typing notifications. ([#2242](https://github.com/element-hq/element-x-android/issues/2242)) +- Manually mark a room as unread. ([#2261](https://github.com/element-hq/element-x-android/issues/2261)) +- Add empty state to the room list. ([#2330](https://github.com/element-hq/element-x-android/issues/2330)) +- Allow joining unencrypted video calls in non encrypted rooms. ([#2333](https://github.com/element-hq/element-x-android/issues/2333)) Bugfixes 🐛 ---------- - - Fix crash after unregistering UnifiedPush distributor ([#2304](https://github.com/element-hq/element-x-android/issues/2304)) - - Add missing device id to settings screen. ([#2316](https://github.com/element-hq/element-x-android/issues/2316)) - - Open the keyboard (and keep it opened) when creating a poll. ([#2329](https://github.com/element-hq/element-x-android/issues/2329)) - - Fix message forwarding after SDK API change related to Timeline intitialization. +- Fix crash after unregistering UnifiedPush distributor ([#2304](https://github.com/element-hq/element-x-android/issues/2304)) +- Add missing device id to settings screen. ([#2316](https://github.com/element-hq/element-x-android/issues/2316)) +- Open the keyboard (and keep it opened) when creating a poll. ([#2329](https://github.com/element-hq/element-x-android/issues/2329)) +- Fix message forwarding after SDK API change related to Timeline intitialization. Other changes ------------- - - Adjusted the login flow buttons so the continue button is always at the same height ([#825](https://github.com/element-hq/element-x-android/issues/825)) - - Move migration screen to within the room list ([#2310](https://github.com/element-hq/element-x-android/issues/2310)) - - Render correctly in reply to data when Event cannot be decrypted or has been redacted ([#2318](https://github.com/element-hq/element-x-android/issues/2318)) - - Remove Compose Foundation version pinning workaround. This was done to avoid a bug introduced in the default foundation version used by the material3 library, but that has already been fixed. - - Remove `FilterHiddenStateEventsProcessor`, as this is already handled by the Rust SDK. - - Remove session preferences on user log out. +- Adjusted the login flow buttons so the continue button is always at the same height ([#825](https://github.com/element-hq/element-x-android/issues/825)) +- Move migration screen to within the room list ([#2310](https://github.com/element-hq/element-x-android/issues/2310)) +- Render correctly in reply to data when Event cannot be decrypted or has been redacted ([#2318](https://github.com/element-hq/element-x-android/issues/2318)) +- Remove Compose Foundation version pinning workaround. This was done to avoid a bug introduced in the default foundation version used by the material3 library, but that has already been fixed. +- Remove `FilterHiddenStateEventsProcessor`, as this is already handled by the Rust SDK. +- Remove session preferences on user log out. Breaking changes 🚨 ------------------- - - Update Compound icons in the project. Since the icon prefix changed to `ic_compound_` and the `CompoundIcons` helper now contains the vector icons as composable functions. +- Update Compound icons in the project. Since the icon prefix changed to `ic_compound_` and the `CompoundIcons` helper now contains the vector icons as composable functions. Changes in Element X v0.4.2 (2024-01-31) ======================================== @@ -167,31 +205,31 @@ Matrix SDK 🦀 v0.1.95 Features ✨ ---------- - - Add 'send private read receipts' option in advanced settings ([#2204](https://github.com/element-hq/element-x-android/issues/2204)) - - Send typing notification ([#2240](https://github.com/element-hq/element-x-android/issues/2240)). Disabling the sending of typing notification and rendering typing notification will come soon. +- Add 'send private read receipts' option in advanced settings ([#2204](https://github.com/element-hq/element-x-android/issues/2204)) +- Send typing notification ([#2240](https://github.com/element-hq/element-x-android/issues/2240)). Disabling the sending of typing notification and rendering typing notification will come soon. Bugfixes 🐛 ---------- - - Make the room settings screen update automatically when new room info (name, avatar, topic) is available. ([#921](https://github.com/element-hq/element-x-android/issues/921)) - - Update timeline items' read receipts when the room members info is loaded. ([#2176](https://github.com/element-hq/element-x-android/issues/2176)) - - Edited text message bubbles should resize when edited ([#2260](https://github.com/element-hq/element-x-android/issues/2260)) - - Ensure login and password exclude `\n` ([#2263](https://github.com/element-hq/element-x-android/issues/2263)) - - Room list Ensure the indicators stay grey if the global setting is set to mention only and a regular message is received. ([#2282](https://github.com/element-hq/element-x-android/issues/2282)) +- Make the room settings screen update automatically when new room info (name, avatar, topic) is available. ([#921](https://github.com/element-hq/element-x-android/issues/921)) +- Update timeline items' read receipts when the room members info is loaded. ([#2176](https://github.com/element-hq/element-x-android/issues/2176)) +- Edited text message bubbles should resize when edited ([#2260](https://github.com/element-hq/element-x-android/issues/2260)) +- Ensure login and password exclude `\n` ([#2263](https://github.com/element-hq/element-x-android/issues/2263)) +- Room list Ensure the indicators stay grey if the global setting is set to mention only and a regular message is received. ([#2282](https://github.com/element-hq/element-x-android/issues/2282)) Other changes ------------- - - Add a special logging configuration for nightlies so we can get more detailed info for existing issues. ([#+add-special-tracing-configuration-for-nightlies](https://github.com/element-hq/element-x-android/issues/+add-special-tracing-configuration-for-nightlies)) - - Try mitigating unexpected logouts by making getting/storing session data use a Mutex for synchronization. +- Add a special logging configuration for nightlies so we can get more detailed info for existing issues. ([#+add-special-tracing-configuration-for-nightlies](https://github.com/element-hq/element-x-android/issues/+add-special-tracing-configuration-for-nightlies)) +- Try mitigating unexpected logouts by making getting/storing session data use a Mutex for synchronization. Also added some more logs so we can understand exactly where it's failing. ([#+try-mitigating-unexpected-logouts](https://github.com/element-hq/element-x-android/issues/+try-mitigating-unexpected-logouts)) - - Upgrade Material3 Compose to `1.2.0-beta02`. +- Upgrade Material3 Compose to `1.2.0-beta02`. There is also a constraint on a transitive Compose Foundation dependency version (1.6.0-beta02) that fixes the timeline scrolling issue. ([#0-beta02](https://github.com/element-hq/element-x-android/issues/0-beta02)) - - Disambiguate display name in the timeline. ([#2215](https://github.com/element-hq/element-x-android/issues/2215)) +- Disambiguate display name in the timeline. ([#2215](https://github.com/element-hq/element-x-android/issues/2215)) - Disambiguate display name in notifications ([#2224](https://github.com/element-hq/element-x-android/issues/2224)) - - Remove room creation, self-join of room creator and 'this is the beginning of X' timeline items for DMs. ([#2217](https://github.com/element-hq/element-x-android/issues/2217)) - - Encrypt databases used by the Rust SDK on Nightly and Debug builds. ([#2219](https://github.com/element-hq/element-x-android/issues/2219)) - - Fallback to UnifiedPush (if available) if the PlayServices are not installed on the device. ([#2248](https://github.com/element-hq/element-x-android/issues/2248)) - - Add "Report a problem" button to the onboarding screen ([#2275](https://github.com/element-hq/element-x-android/issues/2275)) - - Add in app logs viewer to the "Report a problem" screen. ([#2276](https://github.com/element-hq/element-x-android/issues/2276)) +- Remove room creation, self-join of room creator and 'this is the beginning of X' timeline items for DMs. ([#2217](https://github.com/element-hq/element-x-android/issues/2217)) +- Encrypt databases used by the Rust SDK on Nightly and Debug builds. ([#2219](https://github.com/element-hq/element-x-android/issues/2219)) +- Fallback to UnifiedPush (if available) if the PlayServices are not installed on the device. ([#2248](https://github.com/element-hq/element-x-android/issues/2248)) +- Add "Report a problem" button to the onboarding screen ([#2275](https://github.com/element-hq/element-x-android/issues/2275)) +- Add in app logs viewer to the "Report a problem" screen. ([#2276](https://github.com/element-hq/element-x-android/issues/2276)) Changes in Element X v0.4.1 (2024-01-17) @@ -199,35 +237,35 @@ Changes in Element X v0.4.1 (2024-01-17) Features ✨ ---------- - - Render m.sticker events ([#1949](https://github.com/element-hq/element-x-android/issues/1949)) - - Add support for sending images from the keyboard ([#1977](https://github.com/element-hq/element-x-android/issues/1977)) - - Added support for MSC4027 (render custom images in reactions) ([#2159](https://github.com/element-hq/element-x-android/issues/2159)) +- Render m.sticker events ([#1949](https://github.com/element-hq/element-x-android/issues/1949)) +- Add support for sending images from the keyboard ([#1977](https://github.com/element-hq/element-x-android/issues/1977)) +- Added support for MSC4027 (render custom images in reactions) ([#2159](https://github.com/element-hq/element-x-android/issues/2159)) Bugfixes 🐛 ---------- - - Fix crash sending image with latest Posthog because of an usage of an internal Android method. ([#+crash-sending-image-with-latest-posthog](https://github.com/element-hq/element-x-android/issues/+crash-sending-image-with-latest-posthog)) - - Make sure the media viewer tries the main url first (if not empty) then the thumbnail url and then not open if both are missing instead of failing with an error dialog ([#1949](https://github.com/element-hq/element-x-android/issues/1949)) - - Fix room transition animation happens twice. ([#2084](https://github.com/element-hq/element-x-android/issues/2084)) - - Disable ability to send reaction if the user does not have the permission to. ([#2093](https://github.com/element-hq/element-x-android/issues/2093)) - - Trim whitespace at the end of messages to ensure we render the right content. ([#2099](https://github.com/element-hq/element-x-android/issues/2099)) - - Fix crashes in room list when the last message for a room was an extremely long one (several thousands of characters) with no line breaks. ([#2105](https://github.com/element-hq/element-x-android/issues/2105)) - - Disable rasterisation of Vector XMLs, which was causing crashes on API 23. ([#2124](https://github.com/element-hq/element-x-android/issues/2124)) - - Use `SubomposeLayout` for `ContentAvoidingLayout` to prevent wrong measurements in the layout process, leading to cut-off text messages in the timeline. ([#2155](https://github.com/element-hq/element-x-android/issues/2155)) - - Improve rendering of voice messages in the timeline in large displays ([#2156](https://github.com/element-hq/element-x-android/issues/2156)) - - Fix no indication that user list is loading when inviting to room. ([#2172](https://github.com/element-hq/element-x-android/issues/2172)) - - Hide keyboard when tapping on a message in the timeline. ([#2182](https://github.com/element-hq/element-x-android/issues/2182)) - - Mention selector gets stuck when quickly deleting the prompt. ([#2192](https://github.com/element-hq/element-x-android/issues/2192)) - - Hide verbose state events from the timeline ([#2216](https://github.com/element-hq/element-x-android/issues/2216)) +- Fix crash sending image with latest Posthog because of an usage of an internal Android method. ([#+crash-sending-image-with-latest-posthog](https://github.com/element-hq/element-x-android/issues/+crash-sending-image-with-latest-posthog)) +- Make sure the media viewer tries the main url first (if not empty) then the thumbnail url and then not open if both are missing instead of failing with an error dialog ([#1949](https://github.com/element-hq/element-x-android/issues/1949)) +- Fix room transition animation happens twice. ([#2084](https://github.com/element-hq/element-x-android/issues/2084)) +- Disable ability to send reaction if the user does not have the permission to. ([#2093](https://github.com/element-hq/element-x-android/issues/2093)) +- Trim whitespace at the end of messages to ensure we render the right content. ([#2099](https://github.com/element-hq/element-x-android/issues/2099)) +- Fix crashes in room list when the last message for a room was an extremely long one (several thousands of characters) with no line breaks. ([#2105](https://github.com/element-hq/element-x-android/issues/2105)) +- Disable rasterisation of Vector XMLs, which was causing crashes on API 23. ([#2124](https://github.com/element-hq/element-x-android/issues/2124)) +- Use `SubomposeLayout` for `ContentAvoidingLayout` to prevent wrong measurements in the layout process, leading to cut-off text messages in the timeline. ([#2155](https://github.com/element-hq/element-x-android/issues/2155)) +- Improve rendering of voice messages in the timeline in large displays ([#2156](https://github.com/element-hq/element-x-android/issues/2156)) +- Fix no indication that user list is loading when inviting to room. ([#2172](https://github.com/element-hq/element-x-android/issues/2172)) +- Hide keyboard when tapping on a message in the timeline. ([#2182](https://github.com/element-hq/element-x-android/issues/2182)) +- Mention selector gets stuck when quickly deleting the prompt. ([#2192](https://github.com/element-hq/element-x-android/issues/2192)) +- Hide verbose state events from the timeline ([#2216](https://github.com/element-hq/element-x-android/issues/2216)) Other changes ------------- - - Only apply `com.autonomousapps.dependency-analysis` plugin in those modules that need it. ([#+only-apply-dependency-analysis-plugin-where-needed](https://github.com/element-hq/element-x-android/issues/+only-apply-dependency-analysis-plugin-where-needed)) - - Migrate to Kover 0.7.X ([#1782](https://github.com/element-hq/element-x-android/issues/1782)) - - Remove extra logout screen. ([#2072](https://github.com/element-hq/element-x-android/issues/2072)) - - Handle `MembershipChange.NONE` rendering in the timeline. ([#2102](https://github.com/element-hq/element-x-android/issues/2102)) - - Remove extra previews for timestamp view with 'document' case ([#2127](https://github.com/element-hq/element-x-android/issues/2127)) - - Bump AGP version to 8.2.0 ([#2142](https://github.com/element-hq/element-x-android/issues/2142)) - - Replace 'leave room' text with 'leave conversation' for DMs. ([#2218](https://github.com/element-hq/element-x-android/issues/2218)) +- Only apply `com.autonomousapps.dependency-analysis` plugin in those modules that need it. ([#+only-apply-dependency-analysis-plugin-where-needed](https://github.com/element-hq/element-x-android/issues/+only-apply-dependency-analysis-plugin-where-needed)) +- Migrate to Kover 0.7.X ([#1782](https://github.com/element-hq/element-x-android/issues/1782)) +- Remove extra logout screen. ([#2072](https://github.com/element-hq/element-x-android/issues/2072)) +- Handle `MembershipChange.NONE` rendering in the timeline. ([#2102](https://github.com/element-hq/element-x-android/issues/2102)) +- Remove extra previews for timestamp view with 'document' case ([#2127](https://github.com/element-hq/element-x-android/issues/2127)) +- Bump AGP version to 8.2.0 ([#2142](https://github.com/element-hq/element-x-android/issues/2142)) +- Replace 'leave room' text with 'leave conversation' for DMs. ([#2218](https://github.com/element-hq/element-x-android/issues/2218)) Changes in Element X v0.4.0 (2023-12-22) @@ -235,75 +273,75 @@ Changes in Element X v0.4.0 (2023-12-22) Features ✨ ---------- - - Use the RTE library `TextView` to render text events in the timeline. Add support for mention pills - with no interaction yet. ([#1433](https://github.com/element-hq/element-x-android/issues/1433)) - - Tapping on a user mention pill opens their profile. ([#1448](https://github.com/element-hq/element-x-android/issues/1448)) - - Display different notifications for mentions. ([#1451](https://github.com/element-hq/element-x-android/issues/1451)) - - Reply to a poll ([#1848](https://github.com/element-hq/element-x-android/issues/1848)) - - Add plain text representation of messages ([#1850](https://github.com/element-hq/element-x-android/issues/1850)) - - Allow polls to be edited when they have not been voted on ([#1869](https://github.com/element-hq/element-x-android/issues/1869)) - - Scroll to end of timeline when sending a new message. ([#1877](https://github.com/element-hq/element-x-android/issues/1877)) - - Confirm back navigation when editing a poll only if the poll was changed ([#1886](https://github.com/element-hq/element-x-android/issues/1886)) - - Add option to delete a poll while editing the poll ([#1895](https://github.com/element-hq/element-x-android/issues/1895)) - - Open room member avatar when you click on it inside the member details screen. ([#1907](https://github.com/element-hq/element-x-android/issues/1907)) - - Poll history of a room is now accessible from the room details screen. ([#2014](https://github.com/element-hq/element-x-android/issues/2014)) - - Always close the invite list screen when there is no more invite. ([#2022](https://github.com/element-hq/element-x-android/issues/2022)) +- Use the RTE library `TextView` to render text events in the timeline. Add support for mention pills - with no interaction yet. ([#1433](https://github.com/element-hq/element-x-android/issues/1433)) +- Tapping on a user mention pill opens their profile. ([#1448](https://github.com/element-hq/element-x-android/issues/1448)) +- Display different notifications for mentions. ([#1451](https://github.com/element-hq/element-x-android/issues/1451)) +- Reply to a poll ([#1848](https://github.com/element-hq/element-x-android/issues/1848)) +- Add plain text representation of messages ([#1850](https://github.com/element-hq/element-x-android/issues/1850)) +- Allow polls to be edited when they have not been voted on ([#1869](https://github.com/element-hq/element-x-android/issues/1869)) +- Scroll to end of timeline when sending a new message. ([#1877](https://github.com/element-hq/element-x-android/issues/1877)) +- Confirm back navigation when editing a poll only if the poll was changed ([#1886](https://github.com/element-hq/element-x-android/issues/1886)) +- Add option to delete a poll while editing the poll ([#1895](https://github.com/element-hq/element-x-android/issues/1895)) +- Open room member avatar when you click on it inside the member details screen. ([#1907](https://github.com/element-hq/element-x-android/issues/1907)) +- Poll history of a room is now accessible from the room details screen. ([#2014](https://github.com/element-hq/element-x-android/issues/2014)) +- Always close the invite list screen when there is no more invite. ([#2022](https://github.com/element-hq/element-x-android/issues/2022)) Bugfixes 🐛 ---------- - - Fix see room in the room list after leaving it. ([#1006](https://github.com/element-hq/element-x-android/issues/1006)) - - Adjust mention pills font weight and horizontal padding ([#1449](https://github.com/element-hq/element-x-android/issues/1449)) - - Font size in 'All Chats' header was changing mid-animation. ([#1572](https://github.com/element-hq/element-x-android/issues/1572)) - - Accessibility: do not read initial used for avatar out loud. ([#1864](https://github.com/element-hq/element-x-android/issues/1864)) - - Use the right avatar for DMs in DM rooms ([#1912](https://github.com/element-hq/element-x-android/issues/1912)) - - Fix scaling of timeline images: don't crop, don't set min/max aspect ratio values. ([#1940](https://github.com/element-hq/element-x-android/issues/1940)) - - Fix rendering of user name with vertical text by clipping the text. ([#1950](https://github.com/element-hq/element-x-android/issues/1950)) - - Do not render `roomId` if the room has no canonical alias. ([#1970](https://github.com/element-hq/element-x-android/issues/1970)) - - Fix avatar not displayed in notification when the app is not in background ([#1991](https://github.com/element-hq/element-x-android/issues/1991)) - - Fix wording in room invite members view: `Send` -> `Invite`. ([#2037](https://github.com/element-hq/element-x-android/issues/2037)) - - Timestamp positioning was broken, specially for edited messages. ([#2060](https://github.com/element-hq/element-x-android/issues/2060)) - - Emojis in custom reaction bottom sheet are too tiny. ([#2066](https://github.com/element-hq/element-x-android/issues/2066)) - - Set a default power level to join calls. Also, create new rooms taking this power level into account. +- Fix see room in the room list after leaving it. ([#1006](https://github.com/element-hq/element-x-android/issues/1006)) +- Adjust mention pills font weight and horizontal padding ([#1449](https://github.com/element-hq/element-x-android/issues/1449)) +- Font size in 'All Chats' header was changing mid-animation. ([#1572](https://github.com/element-hq/element-x-android/issues/1572)) +- Accessibility: do not read initial used for avatar out loud. ([#1864](https://github.com/element-hq/element-x-android/issues/1864)) +- Use the right avatar for DMs in DM rooms ([#1912](https://github.com/element-hq/element-x-android/issues/1912)) +- Fix scaling of timeline images: don't crop, don't set min/max aspect ratio values. ([#1940](https://github.com/element-hq/element-x-android/issues/1940)) +- Fix rendering of user name with vertical text by clipping the text. ([#1950](https://github.com/element-hq/element-x-android/issues/1950)) +- Do not render `roomId` if the room has no canonical alias. ([#1970](https://github.com/element-hq/element-x-android/issues/1970)) +- Fix avatar not displayed in notification when the app is not in background ([#1991](https://github.com/element-hq/element-x-android/issues/1991)) +- Fix wording in room invite members view: `Send` -> `Invite`. ([#2037](https://github.com/element-hq/element-x-android/issues/2037)) +- Timestamp positioning was broken, specially for edited messages. ([#2060](https://github.com/element-hq/element-x-android/issues/2060)) +- Emojis in custom reaction bottom sheet are too tiny. ([#2066](https://github.com/element-hq/element-x-android/issues/2066)) +- Set a default power level to join calls. Also, create new rooms taking this power level into account. Other changes ------------- - - Add a warning for 'mentions and keywords only' notification option if your homeserver does not support it ([#1749](https://github.com/element-hq/element-x-android/issues/1749)) - - Remove `:libraries:theme` module, extract theme and tokens to [Compound Android](https://github.com/element-hq/compound-android). ([#1833](https://github.com/element-hq/element-x-android/issues/1833)) - - Update poll icons from Compound ([#1849](https://github.com/element-hq/element-x-android/issues/1849)) - - Add ability to see the room avatar in the media viewer. ([#1918](https://github.com/element-hq/element-x-android/issues/1918)) - - RoomList: introduce incremental loading to improve performances. ([#1920](https://github.com/element-hq/element-x-android/issues/1920)) - - Add toggle in the notification settings to disable notifications for room invites. ([#1944](https://github.com/element-hq/element-x-android/issues/1944)) - - Update rendering of Emojis displayed during verification. ([#1965](https://github.com/element-hq/element-x-android/issues/1965)) - - Hide sender info in direct rooms ([#1979](https://github.com/element-hq/element-x-android/issues/1979)) - - Render images in Notification ([#1991](https://github.com/element-hq/element-x-android/issues/1991)) - - Only process content.json from Localazy. ([#2031](https://github.com/element-hq/element-x-android/issues/2031)) - - Always show user avatar in message action sheet ([#2032](https://github.com/element-hq/element-x-android/issues/2032)) - - Hide room list dropdown menu. ([#2062](https://github.com/element-hq/element-x-android/issues/2062)) - - Enable Chat backup, Mentions and Read Receipt in release. ([#2087](https://github.com/element-hq/element-x-android/issues/2087)) - - Make most code used in Compose from `:libraries:matrix` and derived classes Immutable or Stable. +- Add a warning for 'mentions and keywords only' notification option if your homeserver does not support it ([#1749](https://github.com/element-hq/element-x-android/issues/1749)) +- Remove `:libraries:theme` module, extract theme and tokens to [Compound Android](https://github.com/element-hq/compound-android). ([#1833](https://github.com/element-hq/element-x-android/issues/1833)) +- Update poll icons from Compound ([#1849](https://github.com/element-hq/element-x-android/issues/1849)) +- Add ability to see the room avatar in the media viewer. ([#1918](https://github.com/element-hq/element-x-android/issues/1918)) +- RoomList: introduce incremental loading to improve performances. ([#1920](https://github.com/element-hq/element-x-android/issues/1920)) +- Add toggle in the notification settings to disable notifications for room invites. ([#1944](https://github.com/element-hq/element-x-android/issues/1944)) +- Update rendering of Emojis displayed during verification. ([#1965](https://github.com/element-hq/element-x-android/issues/1965)) +- Hide sender info in direct rooms ([#1979](https://github.com/element-hq/element-x-android/issues/1979)) +- Render images in Notification ([#1991](https://github.com/element-hq/element-x-android/issues/1991)) +- Only process content.json from Localazy. ([#2031](https://github.com/element-hq/element-x-android/issues/2031)) +- Always show user avatar in message action sheet ([#2032](https://github.com/element-hq/element-x-android/issues/2032)) +- Hide room list dropdown menu. ([#2062](https://github.com/element-hq/element-x-android/issues/2062)) +- Enable Chat backup, Mentions and Read Receipt in release. ([#2087](https://github.com/element-hq/element-x-android/issues/2087)) +- Make most code used in Compose from `:libraries:matrix` and derived classes Immutable or Stable. Changes in Element X v0.3.2 (2023-11-22) ======================================== Features ✨ ---------- - - Add ongoing call indicator to rooms lists items. ([#1158](https://github.com/element-hq/element-x-android/issues/1158)) - - Add support for typing mentions in the message composer. ([#1453](https://github.com/element-hq/element-x-android/issues/1453)) - - Add intentional mentions to messages. This needs to be enabled in developer options since it's disabled by default. ([#1591](https://github.com/element-hq/element-x-android/issues/1591)) - - Update voice message recording behaviour. Instead of holding the record button, users can now tap the record button to start recording and tap again to stop recording. ([#1784](https://github.com/element-hq/element-x-android/issues/1784)) +- Add ongoing call indicator to rooms lists items. ([#1158](https://github.com/element-hq/element-x-android/issues/1158)) +- Add support for typing mentions in the message composer. ([#1453](https://github.com/element-hq/element-x-android/issues/1453)) +- Add intentional mentions to messages. This needs to be enabled in developer options since it's disabled by default. ([#1591](https://github.com/element-hq/element-x-android/issues/1591)) +- Update voice message recording behaviour. Instead of holding the record button, users can now tap the record button to start recording and tap again to stop recording. ([#1784](https://github.com/element-hq/element-x-android/issues/1784)) Bugfixes 🐛 ---------- - - Always ensure media temp dir exists ([#1790](https://github.com/element-hq/element-x-android/issues/1790)) +- Always ensure media temp dir exists ([#1790](https://github.com/element-hq/element-x-android/issues/1790)) Other changes ------------- - - Update icons and move away from `PreferenceText` components. ([#1718](https://github.com/element-hq/element-x-android/issues/1718)) - - Add item "This is the beginning of..." at the beginning of the timeline. ([#1801](https://github.com/element-hq/element-x-android/issues/1801)) - - LockScreen : rework LoggedInFlowNode and back management when locked. ([#1806](https://github.com/element-hq/element-x-android/issues/1806)) - - Suppress usage of removeTimeline method. ([#1824](https://github.com/element-hq/element-x-android/issues/1824)) - - Remove Element Call feature flag, it's now always enabled. - - Reverted the EC base URL to `https://call.element.io`. - - Moved the option to override this URL to developer settings from advanced settings. +- Update icons and move away from `PreferenceText` components. ([#1718](https://github.com/element-hq/element-x-android/issues/1718)) +- Add item "This is the beginning of..." at the beginning of the timeline. ([#1801](https://github.com/element-hq/element-x-android/issues/1801)) +- LockScreen : rework LoggedInFlowNode and back management when locked. ([#1806](https://github.com/element-hq/element-x-android/issues/1806)) +- Suppress usage of removeTimeline method. ([#1824](https://github.com/element-hq/element-x-android/issues/1824)) +- Remove Element Call feature flag, it's now always enabled. +- Reverted the EC base URL to `https://call.element.io`. +- Moved the option to override this URL to developer settings from advanced settings. Changes in Element X v0.3.1 (2023-11-09) @@ -311,16 +349,16 @@ Changes in Element X v0.3.1 (2023-11-09) Features ✨ ---------- - - Chat backup is still under a feature flag, but when enabled, user can enter their recovery key (it's also possible to input a passphrase) to unlock the encrypted room history. ([#1770](https://github.com/element-hq/element-x-android/pull/1770)) +- Chat backup is still under a feature flag, but when enabled, user can enter their recovery key (it's also possible to input a passphrase) to unlock the encrypted room history. ([#1770](https://github.com/element-hq/element-x-android/pull/1770)) Bugfixes 🐛 ---------- - - Improve confusing text in the 'ready to start verification' screen. ([#879](https://github.com/element-hq/element-x-android/issues/879)) - - Message composer wasn't resized when selecting a several lines message to reply to, then a single line one. ([#1560](https://github.com/element-hq/element-x-android/issues/1560)) +- Improve confusing text in the 'ready to start verification' screen. ([#879](https://github.com/element-hq/element-x-android/issues/879)) +- Message composer wasn't resized when selecting a several lines message to reply to, then a single line one. ([#1560](https://github.com/element-hq/element-x-android/issues/1560)) Other changes ------------- - - PIN: Set lock grace period to 0. ([#1732](https://github.com/element-hq/element-x-android/issues/1732)) +- PIN: Set lock grace period to 0. ([#1732](https://github.com/element-hq/element-x-android/issues/1732)) Changes in Element X v0.3.0 (2023-10-31) @@ -328,24 +366,24 @@ Changes in Element X v0.3.0 (2023-10-31) Features ✨ ---------- - - Element Call: change the 'join call' button in a chat room when there's an active call. ([#1158](https://github.com/element-hq/element-x-android/issues/1158)) - - Mentions: add mentions suggestion view in RTE ([#1452](https://github.com/element-hq/element-x-android/issues/1452)) - - Record and send voice messages ([#1596](https://github.com/element-hq/element-x-android/issues/1596)) - - Enable voice messages for all users ([#1669](https://github.com/element-hq/element-x-android/issues/1669)) - - Receive and play a voice message ([#2084](https://github.com/element-hq/element-x-android/issues/2084)) - - Enable Element Call integration in rooms by default, fix several issues when creating or joining calls. +- Element Call: change the 'join call' button in a chat room when there's an active call. ([#1158](https://github.com/element-hq/element-x-android/issues/1158)) +- Mentions: add mentions suggestion view in RTE ([#1452](https://github.com/element-hq/element-x-android/issues/1452)) +- Record and send voice messages ([#1596](https://github.com/element-hq/element-x-android/issues/1596)) +- Enable voice messages for all users ([#1669](https://github.com/element-hq/element-x-android/issues/1669)) +- Receive and play a voice message ([#2084](https://github.com/element-hq/element-x-android/issues/2084)) +- Enable Element Call integration in rooms by default, fix several issues when creating or joining calls. Bugfixes 🐛 ---------- - - Group fallback notification to avoid having plenty of them displayed. ([#994](https://github.com/element-hq/element-x-android/issues/994)) - - Hide keyboard when exiting the chat room screen. ([#1375](https://github.com/element-hq/element-x-android/issues/1375)) - - Always register the pusher when application starts ([#1481](https://github.com/element-hq/element-x-android/issues/1481)) - - Ensure screen does not turn off when playing a video ([#1519](https://github.com/element-hq/element-x-android/issues/1519)) - - Fix issue where text is cleared when cancelling a reply ([#1617](https://github.com/element-hq/element-x-android/issues/1617)) +- Group fallback notification to avoid having plenty of them displayed. ([#994](https://github.com/element-hq/element-x-android/issues/994)) +- Hide keyboard when exiting the chat room screen. ([#1375](https://github.com/element-hq/element-x-android/issues/1375)) +- Always register the pusher when application starts ([#1481](https://github.com/element-hq/element-x-android/issues/1481)) +- Ensure screen does not turn off when playing a video ([#1519](https://github.com/element-hq/element-x-android/issues/1519)) +- Fix issue where text is cleared when cancelling a reply ([#1617](https://github.com/element-hq/element-x-android/issues/1617)) Other changes ------------- - - Remove usage of blocking methods. ([#1563](https://github.com/element-hq/element-x-android/issues/1563)) +- Remove usage of blocking methods. ([#1563](https://github.com/element-hq/element-x-android/issues/1563)) Changes in Element X v0.2.4 (2023-10-12) @@ -353,20 +391,20 @@ Changes in Element X v0.2.4 (2023-10-12) Features ✨ ---------- - - [Rich text editor] Add full screen mode ([#1447](https://github.com/element-hq/element-x-android/issues/1447)) - - Improve rendering of m.emote. ([#1497](https://github.com/element-hq/element-x-android/issues/1497)) - - Improve deleted session behavior. ([#1520](https://github.com/element-hq/element-x-android/issues/1520)) +- [Rich text editor] Add full screen mode ([#1447](https://github.com/element-hq/element-x-android/issues/1447)) +- Improve rendering of m.emote. ([#1497](https://github.com/element-hq/element-x-android/issues/1497)) +- Improve deleted session behavior. ([#1520](https://github.com/element-hq/element-x-android/issues/1520)) Bugfixes 🐛 ---------- - - WebP images can't be sent as media. ([#1483](https://github.com/element-hq/element-x-android/issues/1483)) - - Fix back button not working in bottom sheets. ([#1517](https://github.com/element-hq/element-x-android/issues/1517)) - - Render body of unknown msgtype in the timeline and in the room list ([#1539](https://github.com/element-hq/element-x-android/issues/1539)) +- WebP images can't be sent as media. ([#1483](https://github.com/element-hq/element-x-android/issues/1483)) +- Fix back button not working in bottom sheets. ([#1517](https://github.com/element-hq/element-x-android/issues/1517)) +- Render body of unknown msgtype in the timeline and in the room list ([#1539](https://github.com/element-hq/element-x-android/issues/1539)) Other changes ------------- - - Room : makes subscribeToSync/unsubscribeFromSync suspendable. ([#1457](https://github.com/element-hq/element-x-android/issues/1457)) - - Add some Konsist tests. ([#1526](https://github.com/element-hq/element-x-android/issues/1526)) +- Room : makes subscribeToSync/unsubscribeFromSync suspendable. ([#1457](https://github.com/element-hq/element-x-android/issues/1457)) +- Add some Konsist tests. ([#1526](https://github.com/element-hq/element-x-android/issues/1526)) Changes in Element X v0.2.3 (2023-09-27) @@ -374,12 +412,12 @@ Changes in Element X v0.2.3 (2023-09-27) Features ✨ ---------- - - Handle installation of Apks from the media viewer. ([#1432](https://github.com/element-hq/element-x-android/pull/1432)) - - Integrate SDK 0.1.58 ([#1437](https://github.com/element-hq/element-x-android/pull/1437)) +- Handle installation of Apks from the media viewer. ([#1432](https://github.com/element-hq/element-x-android/pull/1432)) +- Integrate SDK 0.1.58 ([#1437](https://github.com/element-hq/element-x-android/pull/1437)) Other changes ------------- - - Element call: add custom parameters to Element Call urls. ([#1434](https://github.com/element-hq/element-x-android/issues/1434)) +- Element call: add custom parameters to Element Call urls. ([#1434](https://github.com/element-hq/element-x-android/issues/1434)) Changes in Element X v0.2.2 (2023-09-21) @@ -387,8 +425,8 @@ Changes in Element X v0.2.2 (2023-09-21) Bugfixes 🐛 ---------- - - Add animation when rendering the timeline to avoid glitches. ([#1323](https://github.com/element-hq/element-x-android/issues/1323)) - - Fix crash when trying to take a photo or record a video. ([#1395](https://github.com/element-hq/element-x-android/issues/1395)) +- Add animation when rendering the timeline to avoid glitches. ([#1323](https://github.com/element-hq/element-x-android/issues/1323)) +- Fix crash when trying to take a photo or record a video. ([#1395](https://github.com/element-hq/element-x-android/issues/1395)) Changes in Element X v0.2.1 (2023-09-20) @@ -396,19 +434,19 @@ Changes in Element X v0.2.1 (2023-09-20) Features ✨ ---------- - - Bump Rust SDK to `v0.1.56` - - [Rich text editor] Add link support to rich text editor ([#1309](https://github.com/element-hq/element-x-android/issues/1309)) - - Let the SDK figure the best scheme given an homeserver URL (thus allowing HTTP homeservers) ([#1382](https://github.com/element-hq/element-x-android/issues/1382)) +- Bump Rust SDK to `v0.1.56` +- [Rich text editor] Add link support to rich text editor ([#1309](https://github.com/element-hq/element-x-android/issues/1309)) +- Let the SDK figure the best scheme given an homeserver URL (thus allowing HTTP homeservers) ([#1382](https://github.com/element-hq/element-x-android/issues/1382)) Bugfixes 🐛 ---------- - - Fix ANR on RoomList when notification settings change. ([#1370](https://github.com/element-hq/element-x-android/issues/1370)) +- Fix ANR on RoomList when notification settings change. ([#1370](https://github.com/element-hq/element-x-android/issues/1370)) Other changes ------------- - - Element Call: support scheme `io.element.call` ([#1377](https://github.com/element-hq/element-x-android/issues/1377)) - - [DI] Rework how dagger components are created and provided. ([#1378](https://github.com/element-hq/element-x-android/issues/1378)) - - Remove usage of async-uniffi as it leads to a deadlocks and memory leaks. ([#1381](https://github.com/element-hq/element-x-android/issues/1381)) +- Element Call: support scheme `io.element.call` ([#1377](https://github.com/element-hq/element-x-android/issues/1377)) +- [DI] Rework how dagger components are created and provided. ([#1378](https://github.com/element-hq/element-x-android/issues/1378)) +- Remove usage of async-uniffi as it leads to a deadlocks and memory leaks. ([#1381](https://github.com/element-hq/element-x-android/issues/1381)) Changes in Element X v0.2.0 (2023-09-18) @@ -416,38 +454,38 @@ Changes in Element X v0.2.0 (2023-09-18) Features ✨ ---------- - - Bump Rust SDK to `v0.1.54` - - Add a "Mute" shortcut icon and a "Notifications" section in the room details screen ([#506](https://github.com/element-hq/element-x-android/issues/506)) - - Add a notification permission screen to the initial flow. ([#897](https://github.com/element-hq/element-x-android/issues/897)) - - Integrate Element Call into EX by embedding a call in a WebView. ([#1300](https://github.com/element-hq/element-x-android/issues/1300)) - - Implement Bloom effect modifier. ([#1217](https://github.com/element-hq/element-x-android/issues/1217)) - - Set color on display name and default avatar in the timeline. ([#1224](https://github.com/element-hq/element-x-android/issues/1224)) - - Display a thread decorator in timeline so we know when a message is coming from a thread. ([#1236](https://github.com/element-hq/element-x-android/issues/1236)) - - [Rich text editor] Integrate rich text editor library. Note that markdown is now not supported and further formatting support will be introduced through the rich text editor. ([#1172](https://github.com/element-hq/element-x-android/issues/1172)) - - [Rich text editor] Add formatting menu (accessible via the '+' button) ([#1261](https://github.com/element-hq/element-x-android/issues/1261)) - - [Rich text editor] Add feature flag for rich text editor. Markdown support can now be enabled by disabling the rich text editor. ([#1289](https://github.com/element-hq/element-x-android/issues/1289)) - - [Rich text editor] Update design ([#1332](https://github.com/element-hq/element-x-android/issues/1332)) +- Bump Rust SDK to `v0.1.54` +- Add a "Mute" shortcut icon and a "Notifications" section in the room details screen ([#506](https://github.com/element-hq/element-x-android/issues/506)) +- Add a notification permission screen to the initial flow. ([#897](https://github.com/element-hq/element-x-android/issues/897)) +- Integrate Element Call into EX by embedding a call in a WebView. ([#1300](https://github.com/element-hq/element-x-android/issues/1300)) +- Implement Bloom effect modifier. ([#1217](https://github.com/element-hq/element-x-android/issues/1217)) +- Set color on display name and default avatar in the timeline. ([#1224](https://github.com/element-hq/element-x-android/issues/1224)) +- Display a thread decorator in timeline so we know when a message is coming from a thread. ([#1236](https://github.com/element-hq/element-x-android/issues/1236)) +- [Rich text editor] Integrate rich text editor library. Note that markdown is now not supported and further formatting support will be introduced through the rich text editor. ([#1172](https://github.com/element-hq/element-x-android/issues/1172)) +- [Rich text editor] Add formatting menu (accessible via the '+' button) ([#1261](https://github.com/element-hq/element-x-android/issues/1261)) +- [Rich text editor] Add feature flag for rich text editor. Markdown support can now be enabled by disabling the rich text editor. ([#1289](https://github.com/element-hq/element-x-android/issues/1289)) +- [Rich text editor] Update design ([#1332](https://github.com/element-hq/element-x-android/issues/1332)) Bugfixes 🐛 ---------- - - Make links in room topic clickable ([#612](https://github.com/element-hq/element-x-android/issues/612)) - - Reply action: harmonize conditions in bottom sheet and swipe to reply. ([#1173](https://github.com/element-hq/element-x-android/issues/1173)) - - Fix system bar color after login on light theme. ([#1222](https://github.com/element-hq/element-x-android/issues/1222)) - - Fix long click on simple formatted messages ([#1232](https://github.com/element-hq/element-x-android/issues/1232)) - - Enable polls in release build. ([#1241](https://github.com/element-hq/element-x-android/issues/1241)) - - Fix top padding in room list when app is opened in offline mode. ([#1297](https://github.com/element-hq/element-x-android/issues/1297)) - - [Rich text editor] Fix 'text formatting' option only partially visible ([#1335](https://github.com/element-hq/element-x-android/issues/1335)) - - [Rich text editor] Ensure keyboard opens for reply and text formatting modes ([#1337](https://github.com/element-hq/element-x-android/issues/1337)) - - [Rich text editor] Fix placeholder spilling onto multiple lines ([#1347](https://github.com/element-hq/element-x-android/issues/1347)) +- Make links in room topic clickable ([#612](https://github.com/element-hq/element-x-android/issues/612)) +- Reply action: harmonize conditions in bottom sheet and swipe to reply. ([#1173](https://github.com/element-hq/element-x-android/issues/1173)) +- Fix system bar color after login on light theme. ([#1222](https://github.com/element-hq/element-x-android/issues/1222)) +- Fix long click on simple formatted messages ([#1232](https://github.com/element-hq/element-x-android/issues/1232)) +- Enable polls in release build. ([#1241](https://github.com/element-hq/element-x-android/issues/1241)) +- Fix top padding in room list when app is opened in offline mode. ([#1297](https://github.com/element-hq/element-x-android/issues/1297)) +- [Rich text editor] Fix 'text formatting' option only partially visible ([#1335](https://github.com/element-hq/element-x-android/issues/1335)) +- [Rich text editor] Ensure keyboard opens for reply and text formatting modes ([#1337](https://github.com/element-hq/element-x-android/issues/1337)) +- [Rich text editor] Fix placeholder spilling onto multiple lines ([#1347](https://github.com/element-hq/element-x-android/issues/1347)) Other changes ------------- - - Add a sub-screen "Notifications" in the existing application Settings ([#510](https://github.com/element-hq/element-x-android/issues/510)) - - Exclude some groups related to analytics to be included. ([#1191](https://github.com/element-hq/element-x-android/issues/1191)) - - Use the new SyncIndicator API. ([#1244](https://github.com/element-hq/element-x-android/issues/1244)) - - Improve RoomSummary mapping by using RoomInfo. ([#1251](https://github.com/element-hq/element-x-android/issues/1251)) - - Ensure Posthog data are sent to "https://posthog.element.io" ([#1269](https://github.com/element-hq/element-x-android/issues/1269)) - - New app icon, with monochrome support. ([#1363](https://github.com/element-hq/element-x-android/issues/1363)) +- Add a sub-screen "Notifications" in the existing application Settings ([#510](https://github.com/element-hq/element-x-android/issues/510)) +- Exclude some groups related to analytics to be included. ([#1191](https://github.com/element-hq/element-x-android/issues/1191)) +- Use the new SyncIndicator API. ([#1244](https://github.com/element-hq/element-x-android/issues/1244)) +- Improve RoomSummary mapping by using RoomInfo. ([#1251](https://github.com/element-hq/element-x-android/issues/1251)) +- Ensure Posthog data are sent to "https://posthog.element.io" ([#1269](https://github.com/element-hq/element-x-android/issues/1269)) +- New app icon, with monochrome support. ([#1363](https://github.com/element-hq/element-x-android/issues/1363)) Changes in Element X v0.1.6 (2023-09-04) @@ -455,22 +493,22 @@ Changes in Element X v0.1.6 (2023-09-04) Features ✨ ---------- - - Enable the Polls feature. Allows to create, view, vote and end polls. ([#1196](https://github.com/element-hq/element-x-android/issues/1196)) +- Enable the Polls feature. Allows to create, view, vote and end polls. ([#1196](https://github.com/element-hq/element-x-android/issues/1196)) - Create poll. ([#1143](https://github.com/element-hq/element-x-android/issues/1143)) Bugfixes 🐛 ---------- - Ensure notification for Event from encrypted room get decrypted content. ([#1178](https://github.com/element-hq/element-x-android/issues/1178)) - - Make sure Snackbars are only displayed once. ([#928](https://github.com/element-hq/element-x-android/issues/928)) - - Fix the orientation of sent images. ([#1135](https://github.com/element-hq/element-x-android/issues/1135)) - - Bug reporter crashes when 'send logs' is disabled. ([#1168](https://github.com/element-hq/element-x-android/issues/1168)) - - Add missing link to the terms on the analytics setting screen. ([#1177](https://github.com/element-hq/element-x-android/issues/1177)) - - Re-enable `SyncService.withEncryptionSync` to improve decryption of notifications. ([#1198](https://github.com/element-hq/element-x-android/issues/1198)) - - Crash with `aspectRatio` modifier when `Float.NaN` was used as input. ([#1995](https://github.com/element-hq/element-x-android/issues/1995)) +- Make sure Snackbars are only displayed once. ([#928](https://github.com/element-hq/element-x-android/issues/928)) +- Fix the orientation of sent images. ([#1135](https://github.com/element-hq/element-x-android/issues/1135)) +- Bug reporter crashes when 'send logs' is disabled. ([#1168](https://github.com/element-hq/element-x-android/issues/1168)) +- Add missing link to the terms on the analytics setting screen. ([#1177](https://github.com/element-hq/element-x-android/issues/1177)) +- Re-enable `SyncService.withEncryptionSync` to improve decryption of notifications. ([#1198](https://github.com/element-hq/element-x-android/issues/1198)) +- Crash with `aspectRatio` modifier when `Float.NaN` was used as input. ([#1995](https://github.com/element-hq/element-x-android/issues/1995)) Other changes ------------- - - Remove unnecessary year in copyright mention. ([#1187](https://github.com/element-hq/element-x-android/issues/1187)) +- Remove unnecessary year in copyright mention. ([#1187](https://github.com/element-hq/element-x-android/issues/1187)) Changes in Element X v0.1.5 (2023-08-28) @@ -478,7 +516,7 @@ Changes in Element X v0.1.5 (2023-08-28) Bugfixes 🐛 ---------- - - Fix crash when opening any room. ([#1160](https://github.com/element-hq/element-x-android/issues/1160)) +- Fix crash when opening any room. ([#1160](https://github.com/element-hq/element-x-android/issues/1160)) Changes in Element X v0.1.4 (2023-08-28) @@ -486,32 +524,32 @@ Changes in Element X v0.1.4 (2023-08-28) Features ✨ ---------- - - Allow cancelling media upload ([#769](https://github.com/element-hq/element-x-android/issues/769)) - - Enable OIDC support. ([#1127](https://github.com/element-hq/element-x-android/issues/1127)) - - Add a "Setting up account" screen, displayed the first time the user logs in to the app (per account). ([#1149](https://github.com/element-hq/element-x-android/issues/1149)) +- Allow cancelling media upload ([#769](https://github.com/element-hq/element-x-android/issues/769)) +- Enable OIDC support. ([#1127](https://github.com/element-hq/element-x-android/issues/1127)) +- Add a "Setting up account" screen, displayed the first time the user logs in to the app (per account). ([#1149](https://github.com/element-hq/element-x-android/issues/1149)) Bugfixes 🐛 ---------- - - Videos sent from the app were cropped in some cases. ([#862](https://github.com/element-hq/element-x-android/issues/862)) - - Timeline: sender names are now displayed in one single line. ([#1033](https://github.com/element-hq/element-x-android/issues/1033)) - - Fix `TextButtons` being displayed in black. ([#1077](https://github.com/element-hq/element-x-android/issues/1077)) - - Linkify links in HTML contents. ([#1079](https://github.com/element-hq/element-x-android/issues/1079)) - - Fix bug reporter failing after not finding some log files. ([#1082](https://github.com/element-hq/element-x-android/issues/1082)) - - Fix rendering of inline elements in list items. ([#1090](https://github.com/element-hq/element-x-android/issues/1090)) - - Fix crash RuntimeException "No matching key found for the ciphertext in the stream" ([#1101](https://github.com/element-hq/element-x-android/issues/1101)) - - Make links in messages clickable again. ([#1111](https://github.com/element-hq/element-x-android/issues/1111)) - - When event has no id, just cancel parsing the latest room message for a room. ([#1125](https://github.com/element-hq/element-x-android/issues/1125)) - - Only display verification prompt after initial sync is done. ([#1131](https://github.com/element-hq/element-x-android/issues/1131)) +- Videos sent from the app were cropped in some cases. ([#862](https://github.com/element-hq/element-x-android/issues/862)) +- Timeline: sender names are now displayed in one single line. ([#1033](https://github.com/element-hq/element-x-android/issues/1033)) +- Fix `TextButtons` being displayed in black. ([#1077](https://github.com/element-hq/element-x-android/issues/1077)) +- Linkify links in HTML contents. ([#1079](https://github.com/element-hq/element-x-android/issues/1079)) +- Fix bug reporter failing after not finding some log files. ([#1082](https://github.com/element-hq/element-x-android/issues/1082)) +- Fix rendering of inline elements in list items. ([#1090](https://github.com/element-hq/element-x-android/issues/1090)) +- Fix crash RuntimeException "No matching key found for the ciphertext in the stream" ([#1101](https://github.com/element-hq/element-x-android/issues/1101)) +- Make links in messages clickable again. ([#1111](https://github.com/element-hq/element-x-android/issues/1111)) +- When event has no id, just cancel parsing the latest room message for a room. ([#1125](https://github.com/element-hq/element-x-android/issues/1125)) +- Only display verification prompt after initial sync is done. ([#1131](https://github.com/element-hq/element-x-android/issues/1131)) In development 🚧 ---------------- - - [Poll] Add feature flag in developer options ([#1064](https://github.com/element-hq/element-x-android/issues/1064)) - - [Polls] Improve UI and render ended state ([#1113](https://github.com/element-hq/element-x-android/issues/1113)) +- [Poll] Add feature flag in developer options ([#1064](https://github.com/element-hq/element-x-android/issues/1064)) +- [Polls] Improve UI and render ended state ([#1113](https://github.com/element-hq/element-x-android/issues/1113)) Other changes ------------- - - Compound: add `ListItem` and `ListSectionHeader` components. ([#990](https://github.com/element-hq/element-x-android/issues/990)) - - Migrate `object` to `data object` in sealed interface / class #1135 ([#1135](https://github.com/element-hq/element-x-android/issues/1135)) +- Compound: add `ListItem` and `ListSectionHeader` components. ([#990](https://github.com/element-hq/element-x-android/issues/990)) +- Migrate `object` to `data object` in sealed interface / class #1135 ([#1135](https://github.com/element-hq/element-x-android/issues/1135)) Changes in Element X v0.1.2 (2023-08-16) @@ -519,20 +557,20 @@ Changes in Element X v0.1.2 (2023-08-16) Bugfixes 🐛 ---------- - - Filter push notifications using push rules. ([#640](https://github.com/element-hq/element-x-android/issues/640)) - - Use `for` instead of `forEach` in `DefaultDiffCacheInvalidator` to improve performance. ([#1035](https://github.com/element-hq/element-x-android/issues/1035)) +- Filter push notifications using push rules. ([#640](https://github.com/element-hq/element-x-android/issues/640)) +- Use `for` instead of `forEach` in `DefaultDiffCacheInvalidator` to improve performance. ([#1035](https://github.com/element-hq/element-x-android/issues/1035)) In development 🚧 ---------------- - - [Poll] Render start event in the timeline ([#1031](https://github.com/element-hq/element-x-android/issues/1031)) +- [Poll] Render start event in the timeline ([#1031](https://github.com/element-hq/element-x-android/issues/1031)) Other changes ------------- - - Add Button component based on Compound designs ([#1021](https://github.com/element-hq/element-x-android/issues/1021)) - - Compound: implement dialogs. ([#1043](https://github.com/element-hq/element-x-android/issues/1043)) - - Compound: customise `IconButton` component. ([#1049](https://github.com/element-hq/element-x-android/issues/1049)) - - Compound: implement `DropdownMenu` customisations. ([#1050](https://github.com/element-hq/element-x-android/issues/1050)) - - Compound: implement Snackbar component. ([#1054](https://github.com/element-hq/element-x-android/issues/1054)) +- Add Button component based on Compound designs ([#1021](https://github.com/element-hq/element-x-android/issues/1021)) +- Compound: implement dialogs. ([#1043](https://github.com/element-hq/element-x-android/issues/1043)) +- Compound: customise `IconButton` component. ([#1049](https://github.com/element-hq/element-x-android/issues/1049)) +- Compound: implement `DropdownMenu` customisations. ([#1050](https://github.com/element-hq/element-x-android/issues/1050)) +- Compound: implement Snackbar component. ([#1054](https://github.com/element-hq/element-x-android/issues/1054)) Changes in Element X v0.1.0 (2023-07-19) diff --git a/changelog.d/2718.bugfix b/changelog.d/2718.bugfix deleted file mode 100644 index 999d47b59b..0000000000 --- a/changelog.d/2718.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix session verification being asked again for already verified users. diff --git a/changelog.d/2721.misc b/changelog.d/2721.misc deleted file mode 100644 index 2c38dc4ac7..0000000000 --- a/changelog.d/2721.misc +++ /dev/null @@ -1 +0,0 @@ -RoomMember screen: fallback to userProfile data, if the member is not a user of the room. diff --git a/changelog.d/2740.bugfix b/changelog.d/2740.bugfix deleted file mode 100644 index 21aee0b66b..0000000000 --- a/changelog.d/2740.bugfix +++ /dev/null @@ -1 +0,0 @@ -Instead of displaying 'create new recovery key' on the session verification screen when there is no other session active, display it always under the 'enter recovery key' screen. diff --git a/changelog.d/2749.misc b/changelog.d/2749.misc deleted file mode 100644 index 95f60d7085..0000000000 --- a/changelog.d/2749.misc +++ /dev/null @@ -1 +0,0 @@ -Migrate application data. diff --git a/changelog.d/2754.feature b/changelog.d/2754.feature deleted file mode 100644 index 85880c7adc..0000000000 --- a/changelog.d/2754.feature +++ /dev/null @@ -1 +0,0 @@ -Add support for expected decryption errors due to membership (UX and analytics). diff --git a/changelog.d/2758.misc b/changelog.d/2758.misc deleted file mode 100644 index 1e3d894f79..0000000000 --- a/changelog.d/2758.misc +++ /dev/null @@ -1 +0,0 @@ - Let the SDK manage the file log cleanup, and keep one week of log. diff --git a/changelog.d/2759.feature b/changelog.d/2759.feature deleted file mode 100644 index bdd2c3ba77..0000000000 --- a/changelog.d/2759.feature +++ /dev/null @@ -1 +0,0 @@ -Handle permalink navigation to Events. diff --git a/changelog.d/2760.bugfix b/changelog.d/2760.bugfix deleted file mode 100644 index f74383d596..0000000000 --- a/changelog.d/2760.bugfix +++ /dev/null @@ -1 +0,0 @@ -Adjust the typography used in the selected user component so a user's display name fits better. diff --git a/changelog.d/2761.bugfix b/changelog.d/2761.bugfix deleted file mode 100644 index d5afb55597..0000000000 --- a/changelog.d/2761.bugfix +++ /dev/null @@ -1 +0,0 @@ -User display name overflows in timeline messages when it's way too long. diff --git a/changelog.d/2771.feature b/changelog.d/2771.feature deleted file mode 100644 index 2bda11c84c..0000000000 --- a/changelog.d/2771.feature +++ /dev/null @@ -1 +0,0 @@ -Pretty-print event JSON in debug viewer diff --git a/changelog.d/2776.feature b/changelog.d/2776.feature deleted file mode 100644 index 8eec28ef80..0000000000 --- a/changelog.d/2776.feature +++ /dev/null @@ -1 +0,0 @@ -Add support for external permalinks. diff --git a/changelog.d/2778.bugfix b/changelog.d/2778.bugfix deleted file mode 100644 index 9353dda39f..0000000000 --- a/changelog.d/2778.bugfix +++ /dev/null @@ -1 +0,0 @@ -Ensure the application open the room when a notification is clicked. diff --git a/changelog.d/2795.feature b/changelog.d/2795.feature deleted file mode 100644 index 4dec51f765..0000000000 --- a/changelog.d/2795.feature +++ /dev/null @@ -1 +0,0 @@ -Enable support for Android per-app language preferences diff --git a/changelog.d/2801.misc b/changelog.d/2801.misc deleted file mode 100644 index 571d0296e0..0000000000 --- a/changelog.d/2801.misc +++ /dev/null @@ -1 +0,0 @@ -UX cleanup: reorder options in the main settings screen. diff --git a/changelog.d/2806.misc b/changelog.d/2806.misc deleted file mode 100644 index 5f6f53667b..0000000000 --- a/changelog.d/2806.misc +++ /dev/null @@ -1 +0,0 @@ -Analytics: Add support to report current session verification and recovery state diff --git a/changelog.d/2810.bugfix b/changelog.d/2810.bugfix deleted file mode 100644 index d6683a221a..0000000000 --- a/changelog.d/2810.bugfix +++ /dev/null @@ -1 +0,0 @@ -Enforce mandatory session verification only for new logins. diff --git a/changelog.d/2814.misc b/changelog.d/2814.misc deleted file mode 100644 index 14fa36637f..0000000000 --- a/changelog.d/2814.misc +++ /dev/null @@ -1 +0,0 @@ -UX cleanup: room details screen, add new CTA buttons for Invite and Call actions. diff --git a/changelog.d/2818.misc b/changelog.d/2818.misc deleted file mode 100644 index 6146c2ca82..0000000000 --- a/changelog.d/2818.misc +++ /dev/null @@ -1 +0,0 @@ -UX cleanup: user profile. Move send DM to a call to action button, add 'Call' CTA too. diff --git a/changelog.d/2822.misc b/changelog.d/2822.misc deleted file mode 100644 index 5c83de91fe..0000000000 --- a/changelog.d/2822.misc +++ /dev/null @@ -1 +0,0 @@ -Add room badges to room details screen. diff --git a/changelog.d/2825.bugfix b/changelog.d/2825.bugfix deleted file mode 100644 index 786464f40d..0000000000 --- a/changelog.d/2825.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make log less verbose, make sure we upload as many log files as possible before reaching the request size limit of the bug reporting service, discard older logs if they don't fit. diff --git a/changelog.d/2827.bugfix b/changelog.d/2827.bugfix deleted file mode 100644 index 47539e279d..0000000000 --- a/changelog.d/2827.bugfix +++ /dev/null @@ -1 +0,0 @@ -Remove 'Join' button in room directory search results. diff --git a/changelog.d/2829.bugfix b/changelog.d/2829.bugfix deleted file mode 100644 index 203af1f361..0000000000 --- a/changelog.d/2829.bugfix +++ /dev/null @@ -1 +0,0 @@ -Add missing `app_id` and `Version` properties to bug reports. From faca52d1d77ef7341ad61153be293286338a009c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 13 May 2024 17:35:34 +0200 Subject: [PATCH 289/289] Adding fastlane file for version 0.4.12 --- .../metadata/android/en-US/changelogs/40004120.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/40004120.txt diff --git a/fastlane/metadata/android/en-US/changelogs/40004120.txt b/fastlane/metadata/android/en-US/changelogs/40004120.txt new file mode 100644 index 0000000000..6ecb5ad718 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/40004120.txt @@ -0,0 +1,10 @@ +Main changes in this version: + +- Added support for opening matrix URLs inside the app and navigating to replied to messages. +- Added per-app language support for Android 13+. +- Session verification is no longer mandatory for already logged in users. +- Better log handling. +- Fixed CVE-2024-34353 / GHSA-9ggc-845v-gcgv. +- UX improvements. + +Full changelog: https://github.com/element-hq/element-x-android/releases \ No newline at end of file